【问题标题】:Save matrix of double values in OpenCV在 OpenCV 中保存双值矩阵
【发布时间】:2010-05-23 07:59:10
【问题描述】:

我有一个双 (CV_32F) 值的 OpenCV 矩阵。我想把它保存到磁盘上。我知道,我可以将其转换为 1 通道 8 位 IplImage 并保存。但这样一来,我就失去了精确度。有没有办法直接保存成32位格式,不用先转换?如果生成的文件具有图像格式也很好,这样我就可以将结果作为图像查看。

【问题讨论】:

  • 您要查看浮点图像的结果吗?
  • 确实如此。我想我的问题归结为是否存在每像素超过 8 位的灰度图像格式。

标签: matrix opencv save double


【解决方案1】:

您始终可以通过使用 cvSave() 并使用 cvLoad() 将其加载回 OpenCV“原样”保存任何“对象”(CvMat、IplImage、任何东西......)。根据我的经验,大多数浮点图像的东西都不能正常工作,我通常以这种方式保存我的浮点数据。 但是,您不能直接查看存储的数据。

我们经常使用的另一种可能性是包含自己构建的 OpenEXR。您可以使用此库轻松存储全精度浮点图像,并且许多第三方应用程序都能够打开 EXR 文件。请注意,如果我没记错的话,OpenCV 包括 OpenEXR,但我上次尝试时,保存/加载浮点图像无法正常工作。但是,您应该首先尝试将 fp 图像另存为 *.exr,也许这已经在最近的版本中发挥了作用。

【讨论】:

    【解决方案2】:

    您总是可以遍历矩阵并自己写出来。如果您希望它作为图像可见,您可以使用PPM 的变体。不过,如果您使用 0-255 范围之外的值,我不确定哪些程序能够本机读取您的图像格式。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2015-04-20
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多