2015-07-10 10 views
6

Próbuję uruchomić ten prosty program OpenCV, ale mam ten błąd:OpenCV Błąd: asercja nie (size.width> 0 && size.height> 0) prosty kod

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

Kod:

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

Jaka jest przyczyna tego błędu?

+0

mieć pewność, że ścieżka jest poprawna – Miki

+0

również dodać 'waitKey();' w końcu, czy nie będzie widać nic. – Miki

+0

Jestem pewien, skopiowałem tam obrazek – user3191398

Odpowiedz

9

Ten błąd oznacza, że ​​próbujesz wyświetlić pusty obraz. Po załadowaniu obrazu z imshow, zazwyczaj jest to spowodowane:

  1. Ścieżka obrazu jest źle (dwa razy w ewakuacji ograniczników katalogu Windows, np imread("C:\path\to\image.png") powinno być: imread("C:\\path\\to\\image.png") lub imread("C:/path/to/image.png"));
  2. Rozszerzenie obrazu jest nieprawidłowe. (".jpg" różni się od ".jpeg");
  3. Nie masz uprawnień dostępu do folderu.

Prosty obejście celu wykluczenia innych problemów jest umieścić obraz w projekcie dir, i po prostu przejść do imread nazwę pliku (imread("image.png")).

Pamiętaj, aby dodać waitKey();, w przeciwnym razie nic nie zobaczysz.

Można sprawdzić, czy obraz został prawidłowo załadowany jak:

#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

Wygląda na to, OP używa Linuksa lub ewentualnie Cygwin. – drescherjm

+0

@drescherjm tak, to tylko ogólne informacje o tym, jak rozwiązać ten problem (jest wiele pytań na ten temat). Dodałem najbardziej prawdopodobny (i przykład tylko dla Windows), nie krępuj się dodawać te na linux – Miki

0

Zwykle oznacza to, że obraz nie ma, jest to podstawowe twierdzenie o sprawdzenie, czy treść jest wyświetlanych w oknie przed faktycznie wyświetlania to, a przy okazji trzeba stworzyć okno, aby wyświetlić obraz o nazwieWindow ("nazwa"), a następnie imshow ("nazwa", obraz);

+0

nie musisz wywoływać 'namedWindow' przed' imshow' – Miki

1

Miałem dokładnie ten sam problem, tylko w Raspbian. Po wielu próbach rozwiązanie było dość proste, musiałem pominąć rozszerzenie pliku.

#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; 
} 
Powiązane problemy