【问题标题】:OpenCV Error: Assertion failed (size.width>0 && size.height>0) simple codeOpenCV 错误:断言失败 (size.width>0 && size.height>0) 简单代码
【发布时间】:2015-09-29 06:23:37
【问题描述】:

我正在尝试运行这个简单的 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;
}

这个错误的原因是什么?

【问题讨论】:

  • 确保路径正确
  • 最后还要加上waitKey();,否则你什么都看不到。
  • 我确定,我复制了那里的图片
  • 把图片放到你的项目目录中,然后imread("beniz1.jpg")。这会工作
  • 我不知道...这是你的电脑。

标签: c++ opencv


【解决方案1】:

只需将图像添加到项目目录文件夹即可。

如何:

1-在默认左侧的搜索解决方案资源管理器中右键单击您的项目名称。

2-点击文件资源管理器中的打开文件夹

3-将图像粘贴到该文件夹​​

然后

#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;
}

【讨论】:

    【解决方案2】:

    我在 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");

    【讨论】:

      【解决方案3】:

      很可能,您没有使用正确的图像路径或格式。 如果您使用的是 Windows: img =cv2.imread("C:/Users/mohin/Pictures/IMG_4514.jpg")

      【讨论】:

        【解决方案4】:

        仔细检查您的图像路径

        【讨论】:

          【解决方案5】:

          我遇到了完全相同的问题,只是在 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;
          }
          

          【讨论】:

            【解决方案6】:

            此错误表示您正在尝试显示空图像。当你用imshow加载图片时,这通常是由于:

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

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

            记得加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;
            }
            

            【讨论】:

            • 看起来 OP 正在使用 linux 或者可能是 cygwin。
            • @drescherjm 是的,这只是关于如何解决这个问题的一般信息(关于这个特定主题有很多问题)。我添加了最可能的(并且仅适用于 Windows),请随意在 linux 上添加那些
            【解决方案7】:

            通常这意味着您的图像不存在,这是一个基本断言,用于在实际显示内容之前检查内容是否可以在窗口中显示,顺便说一下,您需要创建一个窗口才能显示图像 namedWindow( "name") 然后 imshow ("name", image);

            【讨论】:

            • 你不需要在imshow之前调用namedWindow
            • 你是对的。看到这个错误,首先需要检查一下图片路径是否正确。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-13
            • 2019-07-24
            相关资源
            最近更新 更多