我正在我的程序中阅读许多图像,并使用以下代码来读取每个图像。
cv::Mat_<float> LoadedImage = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
并且,它适用于某些图像,但不适用于所有图像。 (图像都是JPG文件)
我使用VS 2010调试模式检查了结构,LoadedImage
具有以下结构。
Structure http://imageshack.com/a/img838/451/5n17.png
以某种方式行为零(但是cols是正确的)。有人能够向我解释原因吗? :)
提前谢谢。
我正在使用我目前使用的代码来避免此问题。但我不确定为什么必须这样做。
// Read image with imread() to Mat
cv::Mat LoadedImage_CharFormat = imread(fullfilename);
// Convert to Gray image
if(LoadedImage_CharFormat.type() != CV_8UC1)
cvtColor(LoadedImage_CharFormat, LoadedImage_CharFormat, CV_RGB2GRAY);
// Convert to Mat_<float>
cv::Mat_<float> LoadedImage;
LoadedImage_CharFormat.convertTo(LoadedImage, CV_32F);
以下是您可以尝试的图片。 http://imagizer.imageshack.us/a/img845/4624/y8h0.jpg
答案 0 :(得分:4)
您无法将灰度(uchar)图像直接读入浮点Mat。 相反,
Mat m = imread("image.jpg",0);
Mat_<float> fm;
m.convertTo(fm,CV_32F);