我需要在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
任何建议都非常感谢!
每个浮点点数乘以 2^16-1 来转换为 16 位。浮点图像存储的值介于 [0,1] 之间,您希望将其映射到范围 [0,2^16-1]
opencv 将使用普通的 imwrite() 在 PNG 和 TIFF 中保存 16 位未压缩。
(它也会将它们保存为 JPEG,尽管我不太幸运地找到读取 16 位 jpeg 的东西)
0 和 255 之间转换之前使用CV_NORM_MINMAX对图像进行归一化