代码之家  ›  专栏  ›  技术社区  ›  Christian

在opencv中保存双值矩阵

  •  3
  • Christian  · 技术社区  · 14 年前

    我有一个双(cv f)值的opencv矩阵。我想把它存到磁盘上。我知道,我可以把它转换成一个单通道的8位iplmimage并保存它。但这样,我就失去了精确性。有没有一种方法可以直接将其保存为32位格式,而不必先转换它?如果结果文件具有图像格式,那么它也会很好,这样我就可以以图像的形式查看结果。

    3 回复  |  直到 13 年前
        1
  •  3
  •   zerm    14 年前

    通过使用cvsave()并使用cvload()将其重新加载,您可以始终从opencv“原样”中保存任何“对象”(cvmat、ipliimage、anything..)。根据我的经验,大多数浮点图像都不能正常工作,我通常用这种方式保存浮点数据。 但是,不能直接查看存储的数据。

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

        2
  •  0
  •   mpen    14 年前

    你可以迭代矩阵,然后自己写出来。如果希望它可以作为图像查看,可以使用 PPM . 但是,如果使用的值超出0-255范围,我不确定哪些程序能够本机读取您的图像格式。

        3
  •  0
  •   SSilk    13 年前

    这是旧的,但我想我会把我的两分钱投进去。

    如果您只想将浮动图像保存到磁盘上,而不需要查看它们,那么您可能需要查看便携式浮动映射(pfm)图像格式。非常简单的格式,只将浮动保存到磁盘,没有压缩,头文件最少。您可以很快地为此编写自己的读/写代码。这就是我在HDR研究中使用的。

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

    您还可以考虑保存为exr或hdr格式,并使用Photomatix的内置hdr图像查看器,该查看器为您提供一个单独的小窗口,显示围绕当前光标位置的实时色调映射窗口。这是一个很好的方法导航一个HDR或浮点图像,以获得一个“什么是真正的存在”的感觉,而不需要色调映射整个事情。