1

这是非常简单的代码,但不知道哪里出错了,我将图像从 8 转换为 32

与此相同的线程

如何将 8 位 OpenCV IplImage* 转换为 32 位 IplImage*?

char * InputImagePath = "E:\\Inp\\lg1.jpg";
IplImage* ImageIn = cvLoadImage(InputImagePath,1);

IplImage *img32 = cvCreateImage(cvGetSize(ImageIn), 32 , 3);
cvConvertScale(ImageIn,img32,1/255.);

cvSaveImage("E:\\Inp\\zzout.jpg",img32);

输出: zzout.jpg 保存在我的本地硬盘中,但它是空的(空白图像)

请帮我解决这个问题。受够了这个简单的问题

4

3 回答 3

2

如果您不必使用旧式 OpenCV 结构,我建议在较新版本中切换到更直观的图像处理方式:[ cv::Mat ] 和 I/O:[ cv:imread / cv:imwrite ]给它一个阅读: http: //opencv.willowgarage.com/documentation/cpp/basic_structures.html http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html

于 2013-05-23T09:03:39.260 回答
2

如果您被困在旧的 OpenCV 上,这里有一个更完整的答案:

  • 8 位图像 - 1 个颜色通道
  • 24 位图像 - 3 个颜色通道(蓝色、绿色、红色)
  • 32 位图像 - 4 个颜色通道(BGR + Alpha - 在 PNG 中很常见)

正如我所看到的,Pixel,您正在处理 JPEG,这意味着您需要处理 8 位(灰度)或 24 位(BGR)输入。

这是您需要的代码:

if (inputImage->nChannels == 1)
{
    cvCvtColor(inputImage, image24bit, CV_GRAY2BGR);
}   
else
{
    cvCopy(inputImage, image24bit, NULL);
}
于 2013-06-03T15:41:23.047 回答
1

cvSaveImage 只能保存 8 位图像。

您正在尝试将 32 位浮点图像保存为 jpeg,但 jpeg 仅支持 8 位(好的标准有 12 位,但没有人支持)。

于 2013-05-23T07:06:48.983 回答