2015-07-10 9 views
6

Ich versuche, dieses einfache OpenCV Programm zu laufen, aber ich habe diesen Fehler:OpenCV Fehler: Assertion failed (Size.width> 0 && Size.height> 0) einfacher Code

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file .../opencv/modules/highgui/src/window.cpp, line 276 

Code:

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

Was ist die Ursache für diesen Fehler?

+0

sicher sein, der Pfad korrekt ist – Miki

+0

auch eine 'WAITKEY() hinzufügen;' am Ende, oder Sie werden nichts sehen. – Miki

+0

ich bin sicher, ich kopierte dort Bild – user3191398

Antwort

9

Dieser Fehler bedeutet, dass Sie versuchen, ein leeres Bild anzuzeigen. Wenn Sie mit imshow das Bild laden, wird dies in der Regel verursacht durch:

  1. Der Pfad des Bildes falsch ist (in Flucht Windows-Trennzeichen zweimal Verzeichnis, zum Beispiel imread("C:\path\to\image.png") sollte sein: imread("C:\\path\\to\\image.png") oder imread("C:/path/to/image.png"));
  2. Die Bilderweiterung ist falsch. (z.B. ".jpg" unterscheidet sich von ".jpeg");
  3. Sie haben nicht die Rechte, auf den Ordner zuzugreifen.

Eine einfache Abhilfe andere Probleme auszuschließen, ist das Bild in Ihrem Projekt dir zu setzen, und übergeben Sie einfach imread die Dateinamen (imread("image.png")).

Denken Sie daran, waitKey(); hinzuzufügen, sonst werden Sie nichts sehen.

Sie können prüfen, ob ein Bild gleich richtig geladen wurde:

#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

Es sieht so aus Das OP verwendet Linux oder möglicherweise Cygwin. – drescherjm

+0

@drescherjm Ja, es ist nur eine allgemeine Information, wie man dieses Problem lösen kann (es gibt eine Menge Fragen zu diesem speziellen Thema). Ich habe die wahrscheinlichste (und nur für Windows) hinzugefügt, fühlen Sie sich frei, die auf Linux – Miki

0

Normalerweise bedeutet dies, dass Ihr Bild nicht da ist, es ist eine grundlegende Behauptung zu überprüfen, ob der Inhalt im Fenster angezeigt werden kann, bevor sie tatsächlich Anzeige es, und nebenbei müssen Sie ein Fenster erstellen, um das Bild namensWindow ("Name") dann imshow ("Name", Bild) zu zeigen;

+0

hinzufügen, müssen Sie 'namedWindow' nicht vor' imshow' aufrufen – Miki

1

Ich hatte genau das gleiche Problem, nur in Raspbian. Nach stundenlangen Versuchen war die Lösung ziemlich einfach, ich musste die Dateierweiterung weglassen.

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