OpenCV+Android关键点检测崩溃

OpenCV+Android关键点检测崩溃,android,opencv,crash,keypoint,Android,Opencv,Crash,Keypoint,我在这个问题上做了大量的研究,并尝试了所有的方法,但没有一种有效,所以是时候对它进行一个新的话题了。 我正在做一个项目,用户将从设备中选择一张图片,程序将返回相同的图片,并在上面绘制关键点。 我以前用openCV制作过另一个程序,现在在android上使用的方式完全相同,只是改变了它的显示方式,而不是一个窗口,一个图像视图。 这是imageView的代码: public void setPic(View v){ Intent in=new Intent(Intent.ACTION_GET

我在这个问题上做了大量的研究,并尝试了所有的方法,但没有一种有效,所以是时候对它进行一个新的话题了。 我正在做一个项目,用户将从设备中选择一张图片,程序将返回相同的图片,并在上面绘制关键点。 我以前用openCV制作过另一个程序,现在在android上使用的方式完全相同,只是改变了它的显示方式,而不是一个窗口,一个图像视图。 这是imageView的代码:

public void setPic(View v){
    Intent in=new Intent(Intent.ACTION_GET_CONTENT);
    in.setType("image/*");
    startActivityForResult(in,FILE_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case FILE_REQUEST:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            InputStream imageStream;
           // exception handle!!!
            try {
                imageStream = getContentResolver().openInputStream(selectedImage);
                Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                img.setImageBitmap(yourSelectedImage);

                keyPointDetection(selectedImage.getPath());
            } 

            catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}
这应该是从imageView中捕获关键点并输出所选图片的部分,其中包含关键点:

public static KeyPoint[] keyPointDetection(String filename){
    MatOfKeyPoint keypoints = new MatOfKeyPoint();

    FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
    neki = Highgui.imread(filename);

    detector.detect(neki, keypoints);
    KeyPoint[] keypoint = keypoints.toArray();

    Bitmap resultBitmap = Bitmap.createBitmap(keypoints.cols(),keypoints.rows(),Bitmap.Config.ARGB_8888);;
    Features2d.drawKeypoints(neki,keypoints,neki);
    Utils.matToBitmap(keypoints, resultBitmap);

    Highgui.imwrite("keypoints.jpg",neki);


    return keypoint;
}
并且程序会在LogCat中的以下行中崩溃:

04-15 17:27:30.251: E/AndroidRuntime(9915): FATAL EXCEPTION: main
04-15 17:27:30.251: E/AndroidRuntime(9915): Process:  com.example.protorypemk2, PID: 9915
04-15 17:27:30.251: E/AndroidRuntime(9915): java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at org.opencv.core.Mat.n_Mat(Native Method)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at org.opencv.core.Mat.<init>(Mat.java:447)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at org.opencv.core.MatOfKeyPoint.<init>(MatOfKeyPoint.java:14)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at com.example.protorypemk2.MainActivity.keyPointDetection(MainActivity.java:48)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at com.example.protorypemk2.MainActivity.onActivityResult(MainActivity.java:81)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.Activity.dispatchActivityResult(Activity.java:6135)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3564)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3611)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.ActivityThread.access$1400(ActivityThread.java:147)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.os.Looper.loop(Looper.java:135)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at android.app.ActivityThread.main(ActivityThread.java:5254)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at java.lang.reflect.Method.invoke(Native Method)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at java.lang.reflect.Method.invoke(Method.java:372)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
04-15 17:27:30.251: E/AndroidRuntime(9915):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
04-15 17:27:35.898: E/art(9915): No implementation found for void org.opencv.core.Mat.n_delete(long) (tried Java_org_opencv_core_Mat_n_1delete and Java_org_opencv_core_Mat_n_1delete__J)
04-15 17:27:35.898: E/System(9915): Uncaught exception thrown by finalizer
04-15 17:27:35.902: E/System(9915): java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.core.Mat.n_delete(long) (tried Java_org_opencv_core_Mat_n_1delete and Java_org_opencv_core_Mat_n_1delete__J)
04-15 17:27:35.902: E/System(9915):     at org.opencv.core.Mat.n_delete(Native Method)
04-15 17:27:35.902: E/System(9915):     at org.opencv.core.Mat.finalize(Mat.java:2475)
04-15 17:27:35.902: E/System(9915):     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
04-15 17:27:35.902: E/System(9915):     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
04-15 17:27:35.902: E/System(9915):     at java.lang.Thread.run(Thread.java:818)
我提前非常感谢大家