0
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.Canny_Edge) //Unfortunately stops the app when we use this option    {
        ImageView i = (ImageView) findViewById(R.id.image_view);

        Bitmap bmp =BitmapFactory.decodeResource(getResources(),R.drawable.smiley);
        Mat srcMat = new Mat ( bmp.getHeight(), bmp.getWidth(), CvType.CV_8UC3);

        Bitmap myBitmap32 = bmp.copy(Bitmap.Config.ARGB_8888, true);

        Utils.bitmapToMat(myBitmap32, srcMat);

        Mat gray = new Mat(srcMat.size(), CvType.CV_8UC1);
        Imgproc.cvtColor(srcMat, gray, Imgproc.COLOR_RGB2GRAY,4);
        Mat edge = new Mat();
        Mat dst = new Mat();
        Imgproc.Canny(gray, edge, 80, 90);
        Imgproc.cvtColor(edge, dst, Imgproc.COLOR_GRAY2RGBA,4);
        Bitmap resultBitmap = Bitmap.createBitmap(dst.cols(), dst.rows(),Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(dst, resultBitmap);

        i.setImageBitmap(resultBitmap);
    }
    else if(id == R.id.Sobel) {
        ImageView i = (ImageView) findViewById(R.id.image_view);
        i.setImageResource(R.drawable.apj);
           //some code
    }

    return super.onOptionsItemSelected(item);
}

在上面的代码中,Android Studio 没有显示任何错误。但不幸的是,该应用程序停止获取此Canny_Edge 选项(在菜单中)。为什么,谁能解决这个问题。

4

1 回答 1

0

我已经回答了类似的问题:https ://stackoverflow.com/a/50637228/1693327但由于缺乏声誉点,我无法对帖子发表评论,所以我将复制下面的答案。

设备在执行 Imgproc.Canny 函数调用时应该会崩溃。

我相信应用程序在遇到 Canny 检测器时会崩溃,因为您的设备上安装了错误类型的 OpenCV 管理器,无论是版本号还是中央处理器指令集。检查正确的版本应该很简单。只需进入 OpenCV-android-sdk\apk 目录并检查 OpenCV_ 后面的 3 个 (xyz) 数字即可

安卓设备检查指令集 for Windows

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

C:\Users\<'你的用户名'>\AppData\Local\Android\Sdk\platform-tools 运行命令:

./adb.exe shell cat /proc/cpuinfo

获得正确的指令集后,导航回 OpenCV-android-sdk\apk 并找到要在您的 android 设备上安装的正确 apk 版本和指令集。

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

./adb.exe install <path to OpenCV-android-sdk>/apk/OpenCV_x.y.z_Manager_x.yz_<platform instruction set>.apk

除了上述步骤之外,请确保您没有使用其他类型的 OpenCV 管理器的任何其他环境变量,例如在 Application.mk 或 build.gradle 文件中声明不同的环境变量。

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

快乐发展:)。

于 2018-06-01T06:34:46.477 回答