Opencv cvConvertScale中面临的问题

时间:2013-05-23 06:34:45

标签: c++ visual-c++ opencv image-processing iplimage

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

与此类似的线程

How to convert an 8-bit OpenCV IplImage* to a 32-bit 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保存在我的本地硬盘中但是空(空白图像)

请通过这个简单的问题帮我解决这个问题。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
}

答案 2 :(得分:1)

cvSaveImage只能保存8位图像。

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