【问题标题】:Android Java Opencv canny throws cvexceptionAndroid Java Opencv canny 抛出 cvexception
【发布时间】:2017-07-10 01:13:54
【问题描述】:

我想在 Android 中使用 Canny 从图像中检测边缘,但它一直抛出此错误:

E/cv::error(): OpenCV Error: Assertion failed (_dx.type() == CV_16SC1 || _dx.type() == CV_16SC3) in void cv::Canny(cv::InputArray, cv::InputArray, cv::OutputArray, double, double, bool), file /build/master_pack-android/opencv/modules/imgproc/src/canny.cpp, line 959
    E/org.opencv.imgproc: imgproc::Canny_11() caught cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/canny.cpp:959: error: (-215) _dx.type() == CV_16SC1 || _dx.type() == CV_16SC3 in function void cv::Canny(cv::InputArray, cv::InputArray, cv::OutputArray, double, double, bool)
    W/System.err: CvException [org.opencv.core.CvException: cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/canny.cpp:959: error: (-215) _dx.type() == CV_16SC1 || _dx.type() == CV_16SC3 in function void cv::Canny(cv::InputArray, cv::InputArray, cv::OutputArray, double, double, bool)
    W/System.err: ]
    W/System.err:     at org.opencv.imgproc.Imgproc.Canny_1(Native Method)
    W/System.err:     at org.opencv.imgproc.Imgproc.Canny(Imgproc.java:984)
    W/System.err:     at app.android.opencvproject.OpenCVText.detectContours(OpenCVText.java:185)
    W/System.err:     at app.android.opencvproject.CameraPreview$1$1.run(CameraPreview.java:428)
    W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    W/System.err:     at java.lang.Thread.run(Thread.java:818)

我不知道是什么导致了错误,我在互联网上也没有找到任何答案。

这是我使用的代码:

public void detectContours(Bitmap bitmap){
        try{
            Mat img = new Mat();
            Utils.bitmapToMat(bitmap, img);

            Mat gray = new Mat(img.size(), CvType.CV_8UC1);
            Imgproc.cvtColor(img, gray, Imgproc.COLOR_RGB2GRAY, 4);
            Imgproc.Canny(gray, gray, 80, 100);

            Bitmap outputBitmap = Bitmap.createBitmap(gray.cols(), gray.rows(), Bitmap.Config.ARGB_8888);
            Utils.matToBitmap(gray, outputBitmap);
            MediaStore.Images.Media.insertImage(context.getContentResolver(), outputBitmap, "Opencv" , "Hello");
            Log.d("OPENCV", "Image stored in your gallery");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

    标签: java android opencv canny-operator


    【解决方案1】:

    解决了!

    我忘了向 jnilibs 添加更多文件。

    您需要将$OPENCV_SDK/sdk/native/libs 的内容复制到$YOUR_ANDROID_PROJECT/app/src/main/jniLibs/(您必须创建一个名为jniLibs 的新目录)。

    【讨论】:

    • 哪些文件? @svenvdz
    【解决方案2】:

    您是否尝试在应用cvtColor 后检查灰色输出?

    您能否检查一下您的图片类型(表示调用getType()

    【讨论】:

    • 当我测试灰色的输出时,它是一个无色的图像。图片类型使用gray.type()返回0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2016-01-01
    • 2017-07-21
    相关资源
    最近更新 更多