1

我已经对这个问题进行了大量研究并尝试了所有这些方法,但它们都不起作用,所以是时候讨论一个新主题了。我正在制作一个项目,用户将从设备中选择一张图片,程序将返回相同的图片,并在其上绘制关键点。我之前用openCV制作了另一个程序,现在以完全相同的方式在android上使用它,只是改变了显示它的方式,而不是一个窗口,一个imageView。这是 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)

我提前非常感谢你们。

4

0 回答 0