2015-07-10 291 views
6

我试图运行这个简单的OpenCV程序,但我得到这个错误:OpenCV的错误:断言失败(size.width> 0 && size.height> 0)简单的代码

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

这个错误的原因是什么?

+0

确保路径是正确的 – Miki

+0

还添加了'waitKey();'结尾,否则你不会看到任何东西。 – Miki

+0

我相信,我复制那里图像 – user3191398

回答

9

此错误表示您试图显示空白图像。 ;:

  1. 图像的道路是错误的(imread("C:\\path\\to\\image.png"),或imread("C:/path/to/image.png")在Windows逃生两次目录分隔符,例如imread("C:\path\to\image.png")应该是:)当您带着imshow加载图像,这通常是由引起
  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; 
} 
+0

它看起来像OP使用的是linux或可能的cygwin。 – drescherjm

+0

@drescherjm是的,这只是关于如何解决这个问题的一般信息(关于这个特定主题有很多问题)。我添加了最有可能的(仅适用于Windows的示例),随时在linux – Miki

0

通常这意味着你的形象是不存在的,它是用于检查基本断言,如果内容是在窗口显示前实际显示它,顺便说一句,你需要创建一个窗口,以显示图像namedWindow(“名称”),然后imshow(“名称”,图像);

+0

上添加那些不需要在'imshow'之前调用'namedWindow'的示例 – Miki

1

我有完全相同的问题,只有在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; 
} 
相关问题