imread不在Opencv中工作

我正在尝试使用imread函数。

我的代码非常简单。

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

之后,宿主matrix被零指针填充,即图像没有加载。

如果我使用cvLoadImage那么它一切正常。

该文件存在,我不混合释放和debugging库。 为什么imread不起作用?

转载使用opencv 2.4.8。

如果你在Debug中运行,检查你是否也在使用debugging库,它解决了我们的问题。 : 在使用发行版库时,OpenCV imread(文件名)在debugging模式下失败 。

我可以确认,在OpenCV 2.2中有一些imread的问题。 但是,这些问题只发生在Windows 32位系统上。 在Linux和Mac上它工作。 我不知道为什么它不起作用,但我们有一个小的解决方法。

我们用下面的macros解决了这个问题,也许你可以试试这个,然后使用“ourImread”。

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

我在2.4.6面临同样的问题。 原因是在select库时,我select了debugging版本和发行版本。 当我select只有库的debugging版本一切正常

我有同样的问题

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

但是当我插入cv::waitKey(5000);
我不知道为什么,但system pause ,无法加载图像,并在加载图像后暂停!

如果您认为这是一个OpenCV错误,那么,请将您的图像和指示发布到OpenCV错误跟踪器 。

我有同样的问题。 我解决了它。 关键是文件名是否有jpg。 如果文件名是p1 ,你应该使用这样的imread("p1.jpg") 。 但是我们经常把文件名设置为p1.jpg ,在这里我们应该使用这样的imread("p1.jpg.jpg")

我知道这是迟到,但有人可能会发现这有帮助。 使用OpenCV-3.0使用imreadimread了同样的问题。 我试过所有的解决scheme,但实际上我没有添加库opencv2/imgcodecs.hpp 。 虽然imshow在没有它的情况下工作,但添加后我能够读取图像。

我有类似的问题在Linux上,当只读32位TIFF图像。

 Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH); 

问题是因为OpenCV由于某种原因没有用Tiff支持构build。

  1. 在这里看相关的问题

  2. 请确保你的path是正确的,

  3. 根据Opencv的API,我会尝试这个调用:

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

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 ). 

祝你好运

这也发生在我身上,我简单的解决scheme是使用C API,然后转换为Mat

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

反过来也是如此:如果你正在构buildRelease并且你有Debug库,那么imread()悄然失败(在imread()之后errno是0,但是图像对象没有被填充)。

另一种可能性

如果你在OS X上并静态链接OpenCV,一定要使用与OpenCV捆绑在一起的libjpeg,而不是系统中的libjpeg。

我有OpenCV 3.0类似的问题,除了cvLoadImage不工作。 所以,这可能不是真的回答你的问题,但也许会帮助别人。

我也有同样的问题,imread没有工作,cvLoadImage没有工作。

我决定从头开始创build一个新的Visual Studio,现在它工作。

在win32下的OpenCV 2.4.3中,没有一个通用的问题。

我有同样的问题

 cvLoadImage 

是较旧的C风格

 imread 

是c ++风格,但是当你使用debugging库工作正常。 但慢,使用发布库时,它将无法正常工作,因为opencv c + +接口有许多错误。所以你必须使用debugging库,然后imread工作正常

我知道你想使用“imread”&“CV_LOAD_IMAGE_GRAYSCALE”并自动转换。 但是,另一种方式来加载一张图片并转换为灰度:

 define CV_NO_BACKWARD_COMPATIBILITY #include <cv.h> #include <highgui.h> #include <math.h> 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); }