在Opencv cvConvertScale面临的问题

Issues facing in Opencv cvConvertScale

本文关键字:问题 Opencv cvConvertScale      更新时间:2023-10-16

这是一个非常简单的代码,但不知道哪里出了问题,我把图像从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保存在我的本地硬盘,但它是空的(空白图像)

请帮我从这个…受够了这个简单的问题

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

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

正如我所看到的,像素,你在jpeg上操作,这意味着,你需要处理8位(灰度)或24位(BGR)输入。

下面是你需要的代码:

if (inputImage->nChannels == 1)
{
    cvCvtColor(inputImage, image24bit, CV_GRAY2BGR);
}   
else
{
    cvCopy(inputImage, image24bit, NULL);
}

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

cvSaveImage只能保存8位图像

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