imread no funciona en Opencv

Estoy tratando de usar la función imread de OpenCV2.2.

Mi código es muy simple.

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

Después de eso, la matriz de host se llenó con punteros de ceros, es decir, una imagen no se cargó.

Si uso cvLoadImage , todo funciona correctamente.

El archivo existe, y no estoy mezclando las bibliotecas de liberación y depuración. ¿Por qué imread no funciona?

Reproducido con opencv 2.4.8.

Si está ejecutando en Debug, compruebe que también está utilizando bibliotecas de depuración, solucionó nuestro problema. : OpenCV imread (filename) falla en el modo de depuración cuando se utilizan bibliotecas de versiones .

Puedo confirmar que hay algunos problemas con imread en OpenCV 2.2. Sin embargo, los problemas solo ocurrieron en un sistema Windows 32bit. En un Linux y en un Mac funcionó. No puedo decir por qué no funcionó, pero tuvimos una pequeña solución para eso.

Solucionamos este problema con las siguientes macros, tal vez podrías probar esto y usar “ourImread” a partir de ese momento.

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

estaba enfrentando el mismo problema con 2.4.6. El motivo fue que, al seleccionar la biblioteca, había seleccionado tanto la versión de depuración como la de lanzamiento. Cuando seleccioné solo la versión de depuración para la biblioteca todo funcionó bien

He tenido el mismo problema

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

pero lo arreglé cuando cv::waitKey(5000); el cv::waitKey(5000);
No sé por qué pero con la system pause no puede cargar la imagen y se detiene después de que carga la imagen.

Si crees que se trata de un error de OpenCV, publica tu imagen e instrucciones para reproducirlo en el bugtracker de OpenCV .

Tengo el mismo problema. Lo solucioné La clave es si el nombre de archivo tiene jpg. Si el nombre del archivo es p1 , debe usar algo como este imread("p1.jpg") . Pero a menudo configuramos el nombre del archivo como p1.jpg , aquí deberíamos usar algo como este imread("p1.jpg.jpg") .

Sé que es tarde, pero a alguien le puede resultar útil. Estaba enfrentando el mismo problema mientras usaba imread usando OpenCV-3.0. Intenté todas las soluciones, pero en realidad no estaba agregando la biblioteca opencv2/imgcodecs.hpp . Aunque imshow estaba trabajando sin él, pero después de agregar esto, pude leer la imagen.

Tengo un problema similar en Linux, al leer imágenes de tiff de 32 bits solamente.

 Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH); 

El problema se debe a que OpenCV no fue construido con soporte Tiff por alguna razón.

  1. ver pregunta relacionada aquí

  2. Por favor, asegúrese de que su camino sea correcto,

  3. De acuerdo con la API de Opencv, probaría esta llamada:

arrayMat[i]=imread("1.jpg" , 1 );

Los parámetros para imread:

 Mat imread(const string& filename, int flags=1) Loads an image from a file. Parameters: filename – Name of file to be loaded. flags – Specifies color type of the loaded image: >0 the loaded image is forced to be a 3-channel color image =0 the loaded image is forced to be grayscale <0 the loaded image will be loaded as-is (note that in the current implementation the alpha channel, if any, is stripped from the output image, eg 4-channel RGBA image will be loaded as RGB if ). 

Buenas suertes

Esto también me pasó, mi solución simple era usar la API C y luego convertirla a Mat :

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

Lo contrario también es cierto: si está creando Release y tiene librerías Debug, entonces imread () falla silenciosamente (errno es 0 después de imread (), pero el objeto de imagen no está lleno).

Otra posibilidad:

Si está en OS X y vincula estáticamente OpenCV, asegúrese de usar libjpeg, que se incluye con OpenCV, no con el del sistema.

Tuve un problema similar con OpenCV 3.0, excepto que cvLoadImage no funcionaba tan bien. Por lo tanto, esto podría no responder realmente a su pregunta, pero tal vez ayudará a otra persona.

También tuve el mismo problema que imread no funcionó y cvLoadImage funcionó.

Decidí crear un nuevo Visual Studio desde cero y ahora funciona.

No hay un problema general con imread en OpenCV 2.4.3 bajo win32.

Yo tuve el mismo problema

 cvLoadImage 

es un estilo c más viejo

 imread 

es el estilo de C ++, pero cuando usas bibliotecas de depuración funciona bien. pero lento, cuando se usan librerías de versiones no funciona porque la interfaz de cc de opencv tiene muchos errores. Por lo tanto, debes usar las bibliotecas de depuración para que la imposición funcione bien.

Sé que quieres usar “imread” y “CV_LOAD_IMAGE_GRAYSCALE” y convertir automáticamente. Pero esta otra forma de cargar una imagen y convertirla a escala de grises:

 define CV_NO_BACKWARD_COMPATIBILITY #include  #include  #include  int main(){ /* load the image */ IplImage* img = cvLoadImage("yourPicture.bmp"); //jpg - bmp /* retrieve properties */ int width = img->width; int height = img->height; int nchannels = img->nChannels; int step = img->widthStep; IplImage* img2 = cvCreateImage(cvSize(img->height, img->width),IPL_DEPTH_8U,1); /* setup the pointer to access image data */ uchar *data = ( uchar* )img->imageData; uchar *data2= ( uchar* )img2->imageData; /* convert to grayscale manually */ int i, j, r, g, b, byte; for( i = 0 ; i < height ; i++ ) { for( j = 0 ; j < width ; j++ ) { r = data[i*step + j*nchannels + 0]; g = data[i*step + j*nchannels + 1]; b = data[i*step + j*nchannels + 2]; byte = ( r + g + b ) / 3; int v0=0, v1=0, v2=0; data2[i*(img2->widthStep)+j*(img2->nChannels)+0] = byte; data2[i*(img2->widthStep)+j*(img2->nChannels)+1] = byte; data2[i*(img2->widthStep)+j*(img2->nChannels)+2] = byte; } } cvNamedWindow("ImagenColor", 1); cvShowImage("ImagenColor", img); cvNamedWindow("Gray", 1); cvShowImage("Gray", img2); }