2015-07-10 283 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; 
} 
相關問題