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使用imread
我imread
了同样的问题。 我试过所有的解决scheme,但实际上我没有添加库opencv2/imgcodecs.hpp
。 虽然imshow
在没有它的情况下工作,但添加后我能够读取图像。
我有类似的问题在Linux上,当只读32位TIFF图像。
Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH);
问题是因为OpenCV由于某种原因没有用Tiff支持构build。
-
在这里看相关的问题
-
请确保你的path是正确的,
-
根据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); }