Java- OpenCV错误:OpenCV错误:断言失败(dims <= 2 && step [0]> 0)

6
我有这段opencv代码,它对我在某个页面上找到的图像进行卷积。我想尝试一下,但是它会出现以下错误,而我不太了解openCV。我需要帮助。
错误:OpenCV错误:在cv :: Mat :: locateROI的文件C:\ build \ master_winpack-bindings-win64-vc14-static \ opencv \ modules \ core \ src \ matrix.cpp的第949行中断言失败(dims <= 2 && step [0]> 0)。
public class main {

public static void main (String [ ] args) {

System.out.println ("hola");

 try {

     int kernelSize = 3;

     System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

     Mat source = Imgcodecs.imread("logo.png", Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);

     Mat destination = new Mat(source.rows(),source.cols(),source.type());

     Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F){
        {
           put(0,0,0);
           put(0,1,0);
           put(0,2,0);

           put(1,0,0);
           put(1,1,1);
           put(1,2,0);

           put(2,0,0);
           put(2,1,0);
           put(2,2,0);
        }
     };

     Imgproc.filter2D(source, destination, -1, kernel);

     Imgcodecs.imwrite("original.jpg", destination);

  } catch (Exception e) {

      System.out.println("Error: " + e.getMessage());
  }
   }

}


4
你确定图像已经正确加载了吗? - Miki
我的图片确实是'Final.jpg',但我加载了'final.jpg',所以也请检查一下这个! - void
4个回答

3

我遇到了相同的错误,并且按照 @Miki 提供的非常有价值的提示进行了操作。在我的情况下,图像由于不适当的位深度而无法正常加载。对于灰度图像,应该使用 8 位而不是 32 位。


1
我遇到了同样的错误,我在文件名中写成了png而不是jpg。确保你使用正确的扩展名/名称加载图像。

0

看起来你的源和目标是单通道,而你的内核是3通道。


谢谢,那会有什么变化? - Juan M. Guevara Jiménez
我不熟悉Java,但只使用kernel,如何将put(0,0,0); put(0,1,0); put(0,2,0); 转换? - Quang Hoang

0

我之前也遇到了完全相同的错误,当我写下图片的完整路径时,我的代码就可以很好地工作了,所以要注意图片的扩展名,并确保你的图片存在。

这是我所做的:

pic = cv2.imread('C:\Users\WSI\Desktop\python_scripts\hakuoki.jpg',cv2.IMREAD_COLOR)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接