web-dev-qa-db-fra.com

je ne travaille pas à Opencv

J'essaie d'utiliser la fonction imread d'OpenCV2.2. 

Mon code est très simple.

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

Après cela, la matrice de l’hôte a été remplie par des pointeurs zéros, c’est-à-dire qu’une image n’a pas été chargée.

Si j'utilise cvLoadImage, tout fonctionnera correctement.

Le fichier existe et je ne mélange pas les bibliothèques de publication et de débogage. Pourquoi imread ne fonctionne pas?

27
luckydevil

Reproduit à l'opposé 2.4.8. 

Si vous utilisez Debug, vérifiez que vous utilisez également des bibliothèques de débogage, cela a résolu notre problème. : OpenCV imread (nomfichier) échoue en mode débogage lors de l'utilisation de bibliothèques de versions .

20

Je peux confirmer qu’il ya des problèmes d’imread dans OpenCV 2.2. Cependant, les problèmes ne se sont produits que sur un système Windows 32 bits. Sur un Linux et un Mac cela a fonctionné. Je ne peux pas dire pourquoi cela n'a pas fonctionné, mais nous avons eu une petite solution de contournement pour cela.

Nous avons corrigé ce problème avec les macros suivantes. Vous pourriez peut-être essayer ceci et utiliser "ourImread" à partir de là.

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

je faisais face au même problème avec 2.4.6. La raison en était que lors de la sélection de la bibliothèque, j'avais sélectionné à la fois la version de débogage et la version finale. Quand j'ai sélectionné uniquement la version de débogage pour la bibliothèque, tout a bien fonctionné

8
user2975919

J'ai le même problème

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");

mais je l'ai corrigé quand j'ai inséré la cv::waitKey(5000);
Je ne sais pas pourquoi mais avec system pause, il ne peut pas charger l’image et il se met en pause après le chargement de l’image!

6
Lorenzo

Je sais qu'il est tard mais quelqu'un pourrait trouver cela utile. J'étais confronté au même problème lorsque j'utilisais imread avec OpenCV-3.0. J'ai essayé toutes les solutions, mais en réalité, je n'ai pas ajouté la bibliothèque opencv2/imgcodecs.hpp. Bien que imshow fonctionne sans cela, mais après avoir ajouté ceci, j'ai pu lire l'image.

1
Maham

Si vous pensez qu'il s'agit d'un bogue OpenCV, postez votre image et les instructions de reproduction à suivre sur OpenCV bugtracker .

1
Andrey Kamaev

J'ai un problème similaire sous Linux, lors de la lecture d'images tiff 32 bits uniquement.

Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH);

Le problème vient du fait qu'OpenCV n'a pas été construit avec le support Tiff pour une raison quelconque.

1
mrgloom

J'ai le même problème. Je l'ai résolu. La clé est de savoir si le nom de fichier est jpg . Si le nom de fichier est p1, vous devriez utiliser quelque chose comme ceci imread("p1.jpg"). Mais nous définissons souvent le nom de fichier avec p1.jpg, ici nous devrions utiliser quelque chose comme ceci imread("p1.jpg.jpg").

0
lifeiteng

L'inverse est également vrai: si vous construisez Release et que vous avez des bibliothèques Debug, imread () échoue silencieusement (errno a la valeur 0 après imread (), mais l'objet image n'est pas rempli).

Une autre possibilité:

Si vous utilisez OS X et que OpenCV est lié de manière statique, veillez à utiliser libjpeg fourni avec OpenCV, pas celui du système.

J'ai eu un problème similaire avec OpenCV 3.0, sauf que cvLoadImage ne fonctionnait pas aussi bien. Donc, cela ne répond peut-être pas vraiment à votre question, mais peut-être que cela aidera quelqu'un d'autre.

0
Dmitry Zaytsev

Cela m'est également arrivé. Ma solution simple consistait à utiliser l'API C puis à convertir en Mat:

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