gpt4 book ai didi

c++ - OpenCV imwrite 浮点图像,使用哪种转换?

转载 作者:行者123 更新时间:2023-11-28 00:50:04 27 4
gpt4 key购买 nike

我需要在 OpenCV 中存储 float 图像。按照 @tomriddle_1234 的建议将其转换为 CV8U 图像仍然存储黑色 png。

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

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

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^16-1 来转换为 16 位。浮点图像以 [0,1] 之间的值存储,您要将其映射到范围 [0,2^16-1]

opencv 将使用正常的 imwrite() 以 PNG 和 TIFF 格式保存 16 位未压缩文件。

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

关于c++ - OpenCV imwrite 浮点图像,使用哪种转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com