在OpenCV中保存双精度值的矩阵

3

我有一个OpenCV的双精度(CV_32F)矩阵。我想将其保存到磁盘上。我知道,我可以将其转换为1通道8位IplImage并保存。但是这样会失去精度。有没有一种方法可以直接以32位格式保存它,而不必先进行转换?如果结果文件能够具有图像格式,那就更好了,这样我就可以将其视为图像来查看。


你想查看浮点图像的结果吗? - Sunny
是的确实如此。我想我的问题归结为是否有一种每像素超过8位的灰度图像格式。 - Christian
3个回答

3
您可以使用cvSave()将OpenCV中的任何“对象”(CvMat,IplImage等)“原样”保存,并使用cvLoad()加载它。根据我的经验,大多数浮点图像处理无法正确工作,我通常会以这种方式保存我的浮点数据。但是,您无法直接查看存储的数据。
另一个我们经常使用的可能性是包含自己构建的OpenEXR。使用此库可以轻松存储全精度浮点图像,并且许多第三方应用程序能够打开EXR文件。请注意,如果我没有记错,OpenCV包括OpenEXR,但是上次我尝试时,保存/加载浮点图像无法正常工作。但是,您应该首先尝试将fp图像保存为*.exr,也许最近版本已经实现了魔法。

0

你可以遍历矩阵并自己编写输出代码。如果你想将其显示为图像,可以使用PPM的变体。但是,如果你使用超出0-255范围的值,我不确定有哪些程序能够原生读取你的图像格式。


0

这是一个古老的话题,但我想发表一下我的看法。

如果你只是想将浮点图像保存到磁盘上,并且不需要查看它们,你可能想要查看便携式浮点映射(PFM)图像格式。这是一个非常简单的格式,只是将浮点数保存到磁盘中,没有压缩,头部信息也很少。你可以非常快速地编写自己的读写代码。这就是我用于HDR研究的方式。

正如其他人指出的那样,如果要“查看”浮点图像,你需要问自己一些关于它们内容以及如何合理地将它们缩放回你可以在监视器上显示的8位范围的问题。你可以考虑使用Matlab的图像查看器(imshow函数),它提供了一些双重缩放功能。

你还可以考虑保存为EXR或HDR格式,并使用Photomatix内置的HDR图像查看器,该查看器会在当前光标位置周围显示实时色调映射窗口,这是导航HDR或浮点图像以获得“真正存在的东西”的好方法,而无需对整个图像进行色调映射。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接