【问题标题】:Bilateral filter error, Assertion failed ((src.type() == CV_8UC1 || src.type() == CV_8UC3) && src.data != dst.data)双边过滤器错误,断言失败 ((src.type() == CV_8UC1 || src.type() == CV_8UC3) && src.data != dst.data)
【发布时间】:2016-10-12 09:38:02
【问题描述】:

我的代码如下所示:

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
    int width = b.getWidth();
    int height =  b.getHeight();
    Mat tmp = new Mat (width, height, CvType.CV_8UC3);
    Mat tmp2 = tmp.clone();
    Utils.bitmapToMat(b, tmp);
    Imgproc.bilateralFilter(tmp,tmp2,10,50,10);

并给出以下错误,

OpenCV 错误:断言失败 ((src.type() == CV_8UC1 || src.type() == CV_8UC3) && src.data != dst.data) in void cv::bilateralFilter_8u(const cv:: Mat&, cv::Mat&, int, double, double, int),文件 /Volumes/Linux/builds/master_pack-android/opencv/modules/imgproc/src/smooth.cpp,第 3145 行

请问我的代码有什么问题,非常感谢!!

【问题讨论】:

  • 你能告诉我在 ImgProc.bilateralFiler() 中显示的输出在哪里,因为我使用的图像仍然是显示的,所以在哪里可以看到输出?
  • @arqam 在我的代码中,图像由 OpenCV 代码处理,然后按照我提到的链接将处理过的垫子转换为位图并将位图设置为在 Android 中创建的图像视图申请输出

标签: java android opencv


【解决方案1】:

我遇到了同样的问题,在阅读了一些文档后,我找到了解决方案。您从位图中读取的 Mat 类型不是 8UC1 或 8UC3,因此您应该将其转换为 8UC3

Imgproc.cvtColor(originalMat,originalMat,Imgproc.COLOR_BGRA2BGR);

现在你可以使用双边过滤器了 :)

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2015-05-23
    • 2012-11-28
    相关资源
    最近更新 更多