wake-up-neo.net

imread funktioniert nicht in Opencv

Ich versuche die imread-Funktion von OpenCV2.2 zu verwenden. 

Mein Code ist sehr einfach.

cv::Mat Host= imread("1.bmp", CV_LOAD_IMAGE_GRAYSCALE);

Danach wurde die Host-Matrix mit Nullen aufgefüllt, d. H., Ein Bild wurde nicht geladen.

Wenn ich cvLoadImage verwende, funktioniert alles einwandfrei.

Die Datei existiert und ich mische die Release- und Debugbibliotheken nicht. Warum funktioniert imread nicht?

27
luckydevil

Wiedergabe mit opencv 2.4.8. 

Wenn Sie Debug ausführen, überprüfen Sie, ob Sie auch Debugbibliotheken verwenden. Dies hat unser Problem behoben. : OpenCV imread (Dateiname) schlägt im Debug-Modus fehl, wenn Versionsbibliotheken verwendet werden .

Ich kann bestätigen, dass es Probleme mit imread in OpenCV 2.2 gibt. Die Probleme traten jedoch nur auf einem Windows 32-Bit-System auf. Auf einem Linux und einem Mac hat es funktioniert. Ich kann nicht sagen, warum es nicht funktioniert hat, aber wir hatten eine kleine Problemumgehung dafür.

Wir haben dieses Problem mit den folgenden Makros behoben. Vielleicht könnten Sie es ausprobieren und "ourImread" verwenden.

#ifdef WIN32
#define ourImread(filename, isColor) cvLoadImage(filename.c_str(), isColor)
#else
#define ourImread(filename, isColor) imread(filename, isColor)
#endif
9
kadrian

ich hatte das gleiche Problem mit 2.4.6. Der Grund war, dass ich bei der Auswahl der Bibliothek sowohl die Debug-Version als auch die Release-Version ausgewählt hatte. Als ich nur die Debug-Version für die Bibliothek auswählte, funktionierte alles gut

8
user2975919

Ich hatte das gleiche Problem

cv::Mat image= cv::imread("immagine12.jpg");   // Read the file

if(! image.data )                              // Check for invalid input
{
    cout <<  "Could not open or find the image" << std::endl ;
    cv::waitKey(5000);
    return -1;
}

cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image );  

//non so perchè ma senza il waitKey e lasciando solo il system pause non carica l'immagine...
cv::waitKey(5000);


system("pause");

aber ich habe es behoben, als ich die cv::waitKey(5000);
Ich weiß nicht warum, aber mit system pause kann das Bild nicht geladen werden und es wird angehalten, nachdem es geladen wurde!

6
Lorenzo

Ich weiß, es ist spät, aber jemand könnte dies hilfreich finden. Ich hatte das gleiche Problem, als ich imread mit OpenCV-3.0 verwendete. Ich habe alle Lösungen ausprobiert, aber ich habe die Bibliothek opencv2/imgcodecs.hpp nicht hinzugefügt. imshow funktionierte zwar ohne, aber nachdem ich das hinzugefügt hatte, konnte ich das Bild lesen.

1
Maham

Wenn Sie glauben, dass es sich um einen OpenCV-Fehler handelt, veröffentlichen Sie bitte Ihr Bild und die Anweisungen für die Wiedergabe im OpenCV-Bugtracker .

1
Andrey Kamaev

Ich habe ein ähnliches Problem unter Linux, wenn ich nur 32-Bit-TIFF-Bilder lese.

Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH);

Das Problem war, dass OpenCV aus irgendeinem Grund nicht mit Tiff-Unterstützung erstellt wurde.

1
mrgloom

Ich habe das gleiche Problem. Ich habe es gelöst Der Schlüssel ist, ob der Dateiname jpg ..__ hat. Wenn der Dateiname p1 ist, sollten Sie etwas wie imread("p1.jpg") verwenden. Wir setzen den Dateinamen jedoch häufig als p1.jpg, hier sollten wir etwas wie imread("p1.jpg.jpg") verwenden.

0
lifeiteng

Das Gegenteil ist auch der Fall: Wenn Sie Release erstellen und über Debug-Bibliotheken verfügen, schlägt imread () leise fehl (errno ist 0 nach imread (), das Bildobjekt ist jedoch nicht gefüllt).

Andere Möglichkeit:

Wenn Sie mit OS X arbeiten und OpenCV statisch verknüpfen, verwenden Sie unbedingt libjpeg, das im Lieferumfang von OpenCV enthalten ist, nicht das System.

Ich hatte ein ähnliches Problem mit OpenCV 3.0, nur dass cvLoadImage nicht so gut funktionierte. Das beantwortet Ihre Frage vielleicht nicht wirklich, aber vielleicht hilft es jemand anderem.

0
Dmitry Zaytsev

Dies passierte auch mir, meine einfache Lösung bestand darin, die C-API zu verwenden und dann in Mat zu konvertieren:

IplImage* img = cvLoadImage("c://frame_201.bmp");
Mat mat = Mat(img);
0
madhat1