这是一个非常简单的代码,但不知道哪里出了问题,我把图像从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位,但没有人支持)。