我正在尝试运行这个简单的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
加载图像时,这通常是由以下原因引起的:
- 您的映像路径错误(在Windows中转义两次目录分隔符,例如
imread("C:pathtoimage.png")
应该是:imread("C:\path\to\image.png")
或imread("C:/path/to/image.png")
); - 图片扩展名错误。(如。"。jpg"与"。jpeg"不同);
- 你没有权限访问这个文件夹
排除其他问题的一个简单的解决方法是将图像放在项目目录中,并简单地将文件名(imread("image.png")
)传递给imread
。
请记住添加waitKey();
,否则您将看不到任何内容。
你可以像这样检查图片是否正确加载:
#include <opencv2opencv.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;
}
通常这意味着你的图像不在那里,这是一个基本的断言检查内容是否可显示在窗口之前实际显示它,顺便说一下,你需要创建一个窗口,以显示图像namedWindow("name")然后imshow ("name", image);
我有完全相同的问题,只是在Raspbian上。经过几个小时的尝试,解决方案非常简单,我必须去掉文件扩展名。
#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;
}
当我在Ubuntu中使用Qt Creator时,我也得到了同样的错误。图像在项目文件夹中,所以我认为没有必要给出完整的路径。
img = imread("baboon.png");
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-36Gs_O/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp, line 304
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-36Gs_O/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp:304: error: (-215) size.width>0 && size.height>0 in function imshow
通过给出完整路径解决了错误:
img = imread("home/vivek/QT_ImageProcessing/IP_HomeWork1/baboon.png");
很可能,您没有使用正确的路径到您的图像或它的格式。如果你使用的是windows:img = cv2.imread("C:/用户/mohin/图片/IMG_4514.jpg")
只需将您的图像添加到您的项目目录文件夹。
如何:
1-在搜索解决方案资源管理器中右键单击项目名称,该名称默认位于左侧。
2-在文件资源管理器中单击"打开文件夹"
将图片粘贴到该文件夹
然后#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
//change "beniz1" to "beniz1.jpg"
Mat inputImage = imread("beniz1.jpg");
imshow("Display Image", inputImage);
waitKey(5000);
return 0;
}