2016-11-22 219 views
1

我遇到了cv :: imdecode()的一个特性 - 当我试图用非标准尺寸加载图像时,我总是得到带有空缓冲区的图像和行= 0Opencv:imdecode()失败的非标准尺寸的图像

例如,这里是具有大小236x402为.jpg:

enter image description here

我的C++代码:

FILE* pf = NULL; 
pf = _wfopen(strFileName, L"r"); 
if (!pf) 
{ 
    return false; 
} 
fread(pFileBuf, 1, nFileSize, pf); 
fclose(pf); 
cv::Mat matRaw = cv::Mat(1, nFileSize, CV_8UC1, pFileBuf); 
cv::Mat matImage = cv::imdecode(matRaw, CV_LOAD_IMAGE_COLOR); 
delete [] pFileBuf; 
SIZE size; 
size.cx = matImage.cols; 
size.cy = matImage.rows; 

运行后matImage.rows = 0和matImage.data = NULL。

但是对于1280x720的jpeg图像来说效果很好。

想法?

+0

你可以尝试使用'与 “B” fopen'模式(二进制)包括('L” RB'')?如果只使用“r”,那么默认模式取决于某些变量的值,所以使用“b”打开图像文件更安全(不依赖于任何变量以及我知道的所有图像文件都具有二进制结构)。 – Ped7g

+0

pFileBuf的类型是什么? –

+0

[如何在OpenCV中处理JPEG二进制数据?](http://stackoverflow.com/questions/31831210/how-to-process-a-jpeg-binary-data-in-opencv) – Miki

回答

0

pf = _wfopen(strFileName, L"r"); 

的错误必须

pf = _wfopen(strFileName, L"rb"); 

感谢帮助