imread不能在Opencv中工作
imread not working in Opencv
我试图使用OpenCV2.2的imread
函数。
我的代码很简单。
cv::Mat host= imread("1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
之后,主机矩阵被0指针填充,即图像没有加载。
如果我使用cvLoadImage
,那么它都可以正常工作。
文件存在,我没有混合发布和调试库。为什么imread
不起作用?
使用opencv 2.4.8复制。
如果你在调试中运行,检查你是否也在使用调试库,它解决了我们的问题。: OpenCV imread(filename)在使用发布库时在调试模式下失败。
我在2.4.6中遇到了同样的问题。原因是在选择库时,我同时选择了调试版本和发布版本。当我只选择库的调试版本时,一切都很好
我可以确认,OpenCV 2.2中imread存在一些问题。然而,这些问题只发生在Windows 32位系统上。在linux和mac上都能运行。我不知道为什么它不起作用,但我们有一个小的解决方案。
我们用下面的宏解决了这个问题,也许你可以尝试一下,从那时起使用"ourImread"。
#ifdef WIN32
#define ourImread(filename, isColor) cvLoadImage(filename.c_str(), isColor)
#else
#define ourImread(filename, isColor) imread(filename, isColor)
#endif
我也遇到过同样的问题
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
它不能加载图像,它在加载图像后暂停!
我在Linux上也有类似的问题,只读取32位tiff图像。
Mat mat= imread(filename, CV_LOAD_IMAGE_ANYDEPTH);
问题是由于某些原因,OpenCV没有构建Tiff支持。
Opencv4.3 Windows10 x64 Visual Studio 2019我终于解决了这个问题!!
好了,现在,当你遇到这个问题时,你可以试试:
- 检查你的设置,确保你没有在"Project->Properties-> link ->Input"对于发布/调试,
opencv_xxx430d.lib
(注意d
)用于调试,opencv_xxx430.lib
(没有d
)用于发布,平台为x64
。 - 在
C/C++->General
中,您需要设置Additional include directory
,X:/(opencv_build/install)/include
和X:/(opencv_build/install)/include/opencv2
分别用于Release/Debug。 - 也许你应该
#include <opencv2/imgcodecs.hpp>
. - 最后,Unicode问题,这也是我的问题,Unicode符号在图像文件路径,操!我不知道为什么,因为我的代码是非常正常的
string path = "D:/kk.jpg
(注意,它是/
而不是),但你可以试着调试你的代码,也许你可以找到像
path = "?D:/kk.jpg"
这样的东西,他妈的!所以不要直接复制/粘贴你的图像路径,即使你已经使用了绝对路径,你仍然可以遇到unicode问题,所以,你需要做的是删除代码行(string path = "D:/kk.jpg
),然后只是逐一重新键入每个字符!如果你幸运的话,你会看到带有imshow的图像。好运。
如果您认为这是一个OpenCV错误,那么请将您的图像和说明发布到OpenCV错误跟踪器。
我知道现在很晚了,但是有人可能会觉得这很有帮助。我在使用OpenCV-3.0使用imread
时面临同样的问题。我尝试了所有的解决方案,但实际上我没有添加库opencv2/imgcodecs.hpp
。虽然imshow
在没有它的情况下工作,但在我添加这个之后,我能够读取图像。
-
参见此处的相关问题
-
Please make sure your path is correct
-
根据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, e.g. 4-channel RGBA image will be loaded as RGB if ).
好运S
我有同样的问题。我解出来了。关键是文件名是否为jpg。如果文件名是p1
,您应该使用imread("p1.jpg")
。但是我们经常将文件名设置为p1.jpg
,这里我们应该使用imread("p1.jpg.jpg")
.
这也发生在我身上,我的简单解决方案是使用C API,然后转换为Mat
:
IplImage* img = cvLoadImage("c://frame_201.bmp");
Mat mat = Mat(img);
反过来也是正确的:如果您正在构建发布并且您有调试库,那么imread()悄悄地失败(在imread()之后errno为0,但映像对象未填充)。
另一种可能性:
如果你在OS X上静态链接OpenCV,一定要使用libjpeg,它是与OpenCV捆绑在一起的,而不是系统自带的。
我有类似的问题与OpenCV 3.0,除了cvLoadImage
不能很好地工作。所以,这可能不能真正回答你的问题,但也许它会帮助别人。
我也有同样的问题,imread不工作,cvLoadImage工作。
我决定从头开始创建一个新的Visual Studio,现在它工作了。
win32下OpenCV 2.4.3中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);
}
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- C++ / CannyEdgeDetection.exe 已停止工作 代码块 /OpenCV 错误:断言失败
- OPENCV标准视差图无法正常工作
- OpenCV 3.2 在抓取时提供选择超时,但 fscyber 可以工作
- OpenCV的"calcCovarMatrix"函数中"const Mat*样本"参数的工作原理?
- Opencv - filter2D() 方法实际上是如何工作的?
- 带有OpenCv 2.4的Firewire相机.不工作
- Flann Matcher火车在OpenCV中如何工作
- 解释在opencv中实现的阴影检测代码的工作原理
- OpenCV,dlib - 函数中的图像类型转换失败;在外面工作
- BOOST::线程工作线程同步,C++和OpenCV
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- cv::TermCriteria如何在opencv中工作
- convertTo不在opencv中工作
- opencv是如何工作的
- OpenCV 3.0.0 C++:无法使knn->load("file.yml")工作
- 调整图像大小后OpenCV VideWriter无法工作