尝试使用 imread() 和 imshow() 引发 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. 您的映像路径错误(在Windows中转义两次目录分隔符,例如imread("C:pathtoimage.png")应该是:imread("C:\path\to\image.png")imread("C:/path/to/image.png"));
  2. 图片扩展名错误。(如。"。jpg"与"。jpeg"不同);
  3. 你没有权限访问这个文件夹

排除其他问题的一个简单的解决方法是将图像放在项目目录中,并简单地将文件名(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;
}

相关内容

  • 没有找到相关文章

最新更新