2013-10-31 96 views
0

我的Java开发人员。我的目标是使用javaCV检测图像的关键点--javaCV --EXCEPTION_ACCESS_VIOLATION

这是我的代码来检测图像的关键点:

 final CvMat image1 = cvLoadImageM("im1.png" , 0); 

     final CvMat image2 = cvLoadImageM("im2.png", 0); 

     SIFT sift = new SIFT(); 

    FeatureDetector featureDetector =sift.getFeatureDetector(); 


     KeyPoint keypoint1 = new KeyPoint(); 

    KeyPoint keypoint2 = new KeyPoint() ; 

    featureDetector.detect(image1, keypoint1 , null); 


     featureDetector.detect(image2,keypoint2, null); 

但是当我运行这段代码我得到了一个访问冲突异常

 A fatal error has been detected by the Java Runtime Environment: 

    EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7795e3be, pid=128, tid=2348 


    JRE version: Java(TM) SE Runtime Environment (7.0_45-b18) (build 1.7.0_45-b18) 

    Java VM: Java HotSpot(TM) Client VM (24.45-b08 mixed mode, sharing windows-x86) 

    Problematic frame: 

    C [ntdll.dll+0x2e3be] 

我看不到问题在哪里?

+0

任何回应吗? – nawara

回答

0

我没有使用Java CV,但在C++ OpenCV中,Keypoint是一个关键点的结构,而检测器需要获得一个关键点向量。 您必须在Java中使用std :: vector(在C++中使用)的模拟。阵列或类似的东西。

0

您的代码适用于我;我已经改变了唯一的一点是:

final CvMat image1 = cvLoadImageM("C:/temp/316.jpg" , 0); 
final CvMat image2 = cvLoadImageM("C:/temp/330.jpg", 0); 

检查图像路径:

import com.googlecode.javacv.cpp.opencv_core.CvMat; 
import com.googlecode.javacv.cpp.opencv_features2d.FeatureDetector; 
import com.googlecode.javacv.cpp.opencv_features2d.KeyPoint; 
import com.googlecode.javacv.cpp.opencv_nonfree.SIFT; 

import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImageM; 
public class any { 
public static void main(String args[]) 
{ 
final CvMat image1 = cvLoadImageM("C:/temp/316.jpg" , 0); 

    final CvMat image2 = cvLoadImageM("C:/temp/330.jpg", 0); 
    if(image1==null) 
    System.out.println("image is null"); 
if(image2==null) 
    System.out.println("image is null"); 

SIFT sift = new SIFT(); 
FeatureDetector featureDetector =sift.getFeatureDetector(); 
KeyPoint keypoint1 = new KeyPoint(); 
KeyPoint keypoint2 = new KeyPoint() ; 
featureDetector.detect(image1, keypoint1 , null); 
featureDetector.detect(image2,keypoint2, null); 
System.out.println(keypoint1); 
} 
}