Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当调用Imgproc.Canny函数时,Android应用程序崩溃_Java_Android_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Java 当调用Imgproc.Canny函数时,Android应用程序崩溃

Java 当调用Imgproc.Canny函数时,Android应用程序崩溃,java,android,opencv,image-processing,computer-vision,Java,Android,Opencv,Image Processing,Computer Vision,我一直在开发一款可以检测瞳孔大小变化的应用程序。然而,目前我仍在使用openCV库中的Canny函数编写代码 private void runOpenCVCode() { try { File imageFile = new File(locations.get(0)); Uri uri = Uri.fromFile(imageFile); Bitmap bitmap = MediaStore.Ima

我一直在开发一款可以检测瞳孔大小变化的应用程序。然而,目前我仍在使用openCV库中的Canny函数编写代码

    private void runOpenCVCode() {
        try {
            File imageFile = new File(locations.get(0));
            Uri uri = Uri.fromFile(imageFile);
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
            Mat mat = Mat.zeros(100,400, CvType.CV_8UC3);
            Utils.bitmapToMat(bitmap, mat);
            //check mat
            Bitmap bm = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888);
            Utils.matToBitmap(mat, bm);
            pic.setImageBitmap(bm);

            Mat gray = new Mat(mat.size(), CvType.CV_8UC1);
            Imgproc.cvtColor(mat, gray, Imgproc.COLOR_BGR2GRAY, 4);

            Bitmap bmGray = Bitmap.createBitmap(gray.cols(), gray.rows(), Bitmap.Config.ARGB_8888);
            Utils.matToBitmap(gray, bmGray);
            pic.setImageBitmap(bmGray);

            Mat edges = gray;
            double thresh = Imgproc.threshold(gray, edges, 0, 255, Imgproc.THRESH_OTSU);
            Imgproc.Canny(gray, edges, 80, 100);

            Bitmap bmEdges = Bitmap.createBitmap(edges.cols(), edges.rows(), Bitmap.Config.ARGB_8888);
            Utils.matToBitmap(edges, bmEdges);
            pic.setImageBitmap(bmEdges);
        } catch (IOException e) {
            Log.e(TAG, e.toString());
            e.printStackTrace();
        } catch (Exception e) {
            Log.e(TAG, e.toString());
            e.printStackTrace();
        }
    }
代码运行良好,直到遇到canny函数调用为止。如果它被注释掉了,其余的运行没有问题。我假设这是一个本机崩溃,因为应用程序崩溃时日志中没有任何错误,并且直接返回到初始活动。我尝试过以各种方式实例化矩阵灰度和边缘,并使用不同的阈值,但似乎没有任何效果。
如果有任何帮助,我们将不胜感激。

我已经回答了一个类似的问题:但由于缺乏信誉点,我无法对此帖子发表评论,因此我将把答案复制到下面

我相信,当应用程序点击Canny检测器时,它正在崩溃,因为您的设备上安装了错误类型的OpenCV管理器,无论是版本号还是中央处理器指令集。检查正确的版本应该很简单。只需转到OpenCV android sdk\apk目录并检查OpenCV之后的3(x.y.z)个数字_

检查Windows Android设备的指令集

要检查设备的指令集,请导航到adb(android调试桥)目录,该目录通常位于:

C:\Users\\AppData\Local\Android\Sdk\platform tools 运行以下命令:

./adb.exe shell cat /proc/cpuinfo
./adb.exe install <path to OpenCV-android-sdk>/apk/OpenCV_x.y.z_Manager_x.yz_<platform instruction set>.apk
获得正确的指令集后,导航回OpenCV android sdk\apk,找到要安装在android设备上的正确apk版本和指令集

然后,您可以将apk传输到设备并安装它。我发现另一种有用的方法是导航到adb.exe目录并运行以下命令:

./adb.exe shell cat /proc/cpuinfo
./adb.exe install <path to OpenCV-android-sdk>/apk/OpenCV_x.y.z_Manager_x.yz_<platform instruction set>.apk
/adb.exe安装/apk/OpenCV_x.y.z_管理器_x.yz_.apk
除上述步骤外,请确保没有使用其他类型OpenCV管理器的任何其他环境变量,例如在Application.mk或build.gradle文件中声明不同的环境变量

完成上述步骤后,您的Canny探测器应该能够在设备上运行而不会崩溃


高兴地开发:)。

如果没有日志,请发布日志,这主要是因为重新创建新活动时会清除日志@MohamedALOUANE如何阻止圆木清理,以便获取圆木?