当前位置:编程学习 > JAVA >>

求问javacv有关问题

最近在学javacv进行图像特征提取,但是在进行bag of Words提取时出现如下错误
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006c03dc6e, pid=5264, tid=7048
#
# JRE version: 7.0_15-b03
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V  [jvm.dll+0xfdc6e]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# D:\Documents\javaWorkspace\Test\hs_err_pid5264.log

查看错误日志,发现问题出在bowDE.compute(image, key, des, null, null);这句代码上,我对图像处理了解几乎为0,这些代码是为了完成老师给的任务写的,对SIFT,Kmeans和bow只是有些了解,求指导debug,下面贴出所有代码

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_features2d.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;


import static com.googlecode.javacv.cpp.opencv_nonfree.*;
import javax.imageio.ImageIO;


import com.googlecode.javacv.cpp.opencv_core.CvMat;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_features2d.KeyPoint;
public class FeatureExtractor{
private ArrayList<IplImage> images=new ArrayList<IplImage>();
public void addImage(String filename){
try {
IplImage image = IplImage.createFrom(ImageIO.read(new File(filename)));
System.out.println(image);
this.images.add(image);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static KeyPoint get_SIFT_kp(IplImage image){
KeyPoint key=new KeyPoint();
SIFT detector=new SIFT();
detector.detect(image, null, key);
return key;
}
public static KeyPoint get_SIFT_kp(String filename){
try {
IplImage image = IplImage.createFrom(ImageIO.read(new File(filename)));
KeyPoint key=new KeyPoint();
SIFT detector=new SIFT();
detector.detect(image, null, key);
return key;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

public static CvMat SIFTExtract(String filename){
IplImage image;
try {
image = IplImage.createFrom(ImageIO.read(new File(filename)));
KeyPoint key=FeatureExtractor.get_SIFT_kp(image);
DescriptorExtractor detor=DescriptorExtractor.create("SIFT");
CvMat descriptors = cvCreateMat(1, 1, CV_32F);
detor.compute(image, key, descriptors);
System.out.println(descriptors);
return descriptors;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

/*System.out.println(descriptors);
System.out.println(descriptors.cols());
System.out.println(descriptors.rows());
System.out.println(descriptors.get(1, 1));*/


return null;
}
public ArrayList<CvMat> BOWTrain(ArrayList<CvMat> descriptors){
BOWKMeansTrainer bowTraining=new BOWKMeansTrainer(1000);
for(Iterator<CvMat> it=descriptors.iterator();it.hasNext();){
CvMat descriptor=it.next();
bowTraining.add(descriptor);
}
System.out.println(this.images);
CvMat dictionary=bowTraining.cluster();
//System.out.println(dictionary);
System.out.println("trained");

DescriptorExtractor dexc=DescriptorExtractor.create("SIFT");
DescriptorMatcher dma=DescriptorMatcher.create("BruteForce");
BOWImgDescriptorExtractor bowDE=new BOWImgDescriptorExtractor(dexc,dma);

bowDE.setVocabulary(dictionary);
System.out.println("trained");
ArrayList<CvMat> bow_des=new ArrayList<CvMat>();
/*System.out.println(dictionary);
System.out.println(dictionary.cols());*/
for(int i=0;i<10;i++){
IplImage image=images.get(i);
KeyPoint key=FeatureExtractor.get_SIFT_kp(image);
/*System.out.println(key);
System.out.println(bowDE.descriptorSize());*/
CvMat des = cvCreateMat(128,128,CV_64F);
bowDE.compute(image, key, des, null, null);
bow_des.add(des);
/*System.out.println("trained");*/
}
/*System.out.println(bow_des);*/
return bow_des;
}

public static void main(String arg[]){
FeatureExtractor fe=new FeatureExtractor();
ArrayList<CvMat> des=new ArrayList<CvMat>();
for(int i=0;i<10;i++){
String filename="D:\\Documents\\1000000\\100000"+i+".JPG";
/*System.out.println(filename);*/
fe.addImage(filename);
des.add(FeatureExtractor.SIFTExtract("D:\\Documents\\1000000\\100000"+i+".JPG"));

}
fe.BOWTrain(des);
}
}
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,