0

我需要在 OpenCV 中存储一个浮动图像。按照@tomriddle_1234的建议将其转换为 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

任何建议都非常感谢!

4

2 回答 2

2

您可以通过将每个浮点像素乘以 2^16-1 来转换为 16 位。浮点图像存储在 [0,1] 之间的值,您希望将其映射到范围 [0,2^16-1]

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

(它也会将它们保存为 JPEG,尽管我不太幸运地找到读取 16 位 jpeg 的内容)

于 2013-01-31T04:57:19.220 回答
1

在使用 CV_NORM_MINMAX 在 0 和 255 之间转换之前标准化图像

于 2013-01-31T00:10:02.297 回答