在OpenCV中保存double值的矩阵

时间:2010-05-23 07:59:11

标签: matrix opencv save double

我有一个双(CV_32F)值的OpenCV矩阵。我想把它保存到磁盘上。我知道,我可以将它转换为1通道8位IplImage并保存。但是那样,我的精确度会下降。有没有办法直接以32位格式保存它,而不必先转换它?如果生成的文件具有图像格式,那也很好,所以我可以将结果视为图像。

3 个答案:

答案 0 :(得分:3)

您可以随时使用cvSave()并使用cvLoad()将其加载回OpenCV中的任何“对象”(CvMat,IplImage,任何......)。至于我的经验,大多数浮点图像都无法正常工作,我通常以这种方式保存我的浮点数据。 但是,您无法直接查看存储的数据。

我们经常使用的另一种可能性是包含一个自己构建的OpenEXR。您可以使用此库轻松存储完整精度浮点图像,许多第三方应用程序都可以打开EXR文件。请注意,OpenCV包含OpenEXR,如果我没有记错,但上次我尝试过,保存/加载浮点图像无法正常工作。但是,您应该首先尝试将fp图像保存为* .exr,这可能已经与最新版本相提并论。

答案 1 :(得分:0)

你总是可以迭代矩阵并自己写出来。如果您希望它可以作为图像查看,则可以使用PPM的变体。如果您使用0-255范围之外的值,我不确定哪些程序能够原生读取您的图像格式。

答案 2 :(得分:0)

这是旧的,但我想我会投入两分钱。

如果您只想将浮动图像保存到磁盘,而不需要查看它们,则可能需要查看便携式浮动图(PFM)图像格式。非常简单的格式,只是将浮动保存到磁盘,没有压缩,最小的标头。您可以非常快速地编写自己的读/写代码。这就是我用于HDR研究的内容。

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

您也可以考虑保存为EXR或HDR格式,并使用Photomatix的内置HDR图像查看器,它为您提供一个单独的窗口,向您显示当前光标位置周围的实时色调映射窗口。这是一种导航HDR或浮点图像的好方法,可以在没有对整个事物进行色调映射的情况下获得“真正存在的东西”。