OpenCV错误:断言失败(size.width> 0 && size.height> 0)简单的代码

我想运行这个简单的OpenCV程序,但我得到这个错误:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file .../opencv/modules/highgui/src/window.cpp, line 276 

码:

 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; int main() { cout << "Hello World!" << endl; cv::Mat inputImage = cv::imread("/home/beniz1.jpg"); cv::imshow("Display Image", inputImage); return 0; } 

这个错误的原因是什么?

这个错误意味着你正试图显示一个空的图像。 使用imshow加载图像时,通常由以下原因引起:

  1. 你的图像的path是错误的(在Windows中转义两次目录分隔符,例如imread("C:\path\to\image.png")应该是: imread("C:\\path\\to\\image.png")imread("C:/path/to/image.png") );
  2. 图像扩展名是错误的。 (例如“.jpg”与“.jpeg”不同);
  3. 您没有访问该文件夹的权限。

排除其他问题的一个简单的解决方法是将图像放在您的项目目录中,并传递给imread文件名( imread("image.png") )。

记得添加waitKey(); ,否则你什么都看不到。

您可以检查图像是否已正确加载,如:

 #include <opencv2\opencv.hpp> #include <iostream> using namespace cv; int main() { Mat3b img = imread("path_to_image"); if (!img.data) { std::cout << "Image not loaded"; return -1; } imshow("img", img); waitKey(); return 0; } 

我也有同样的问题,只有在Raspbian。 经过几个小时的尝试,解决scheme非常简单,我不得不忽略文件扩展名。

 #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat inputImage = imread("beniz1"); imshow("Display Image", inputImage); waitKey(5000); return 0; } 

通常这意味着你的图像不存在,这是一个基本的断言,用于在实际显示内容之前检查内容是否可以在窗口中显示,通过创build一个窗口来显示图像namedWindow(“name” )然后imshow(“名称”,图像);