OpenCV imwrite一个浮动图像,哪个转换使用?

时间:2013-01-30 23:40:46

标签: c++ opencv

我需要在OpenCV中存储浮动图像。根据{{​​3}}的建议将其转换为CV8U图像仍然存储黑色png。

reference.type() = 5
reference.channels() = 1
reference.depth() = 5

如何将图像转换为8位或16位,以便imwrite可以存储图像,同时保持图像的浮动属性,即:由于转换/精度损失,存储的图像不会“褪色”!

imshow("5t aligned Mean", reference); //Displays the correct image
//reference.convertTo(reference, CV_8U); //Convert image to 8Bit INCORRECT
reference.convertTo(reference, CV_8U, 255.0, 1/255.0); //Correct image
imwrite(subject.c_str(), reference); //Stores a completely black png

非常感谢任何建议!

2 个答案:

答案 0 :(得分:2)

您可以通过将每个浮点像素乘以2 ^ 16来转换为16位。浮点图像以0-1

之间的值存储

opencv将使用普通的imwrite()在PNG和TIFF中保存未压缩的16位。

(它也会将它们保存为JPEG格式虽然我找不到读取16位jpeg的东西的运气较少)

答案 1 :(得分:1)

使用CV_NORM_MINMAX

在使用0到255之间转换之前对图像进行标准化