【问题标题】:OpenCV large images (greater than 1gb) alternativesOpenCV 大图像(大于 1gb)替代方案
【发布时间】:2015-09-08 01:09:48
【问题描述】:

我正在尝试使用 OpenCV imread('Large Image') 读取图像,它无法为我的 25000 x 20000 图像分配足够的空间。我想将所有红色和蓝色像素存储在自己的数组中(并不真正关心绿色)从此图像中对它们进行一些数学运算,并使用这些新值重建和图像。有没有可以做我想做的 OpenCV 的替代品?

我的机器有 16gb,运行 windows 8.1 64 位,我正在使用 python。提前感谢您的任何建议。

【问题讨论】:

  • 单个图像大约为 1.4GB。哇...
  • 错误信息是什么?
  • 它是什么格式? (也许您最好手动解析它,并在阅读时构建通道图像)
  • @karlphillip 是的,我也可以拥有 3gb 图像。报错是OpenCV Error:内存不足(分配1454069272字节失败)
  • 我不知道是否可以使用这样的图像。如果您不需要全局图像来进行数学处理,一个简单的替代方法是将图像分成 4 个部分。然后处理你的 4 个不同的部分。您可以从 Android 项目中查看一些示例算法,因为这是该平台上的常见问题。

标签: python opencv image-processing


【解决方案1】:

一种方法是将 HIPI 图像处理接口与 Hadoop 和 OpenCv 结合使用。 HIPI (http://hipi.cs.virginia.edu/about.html) 可用于将图像剔除成几个较小的部分,运行 opencv 处理,然后重建更大的图像。

可以在这里找到一个不错的设置指南:- https://techgimmick.wordpress.com/2015/06/24/how-to-use-opencv-with-hadoop-or-hipi-hadoop-image-processing-interface/

【讨论】:

    【解决方案2】:

    Libvips 专为大图像而设计。

    【讨论】:

    【解决方案3】:

    您可以使用 ImageMagick 中的stream 工具将任何所需波段的任何所需区域提取到这样的二进制文件中。

    从 25,000x20,000 像素文件 bigboy.tif 中提取整个红色通道:

    stream -map r bigboy.tif red.bin
    
    ls -l
    -rw-r--r--  1 mark  staff  500000000  7 Sep 13:55 red.bin
    

    从 bigboy.tif 的蓝色通道中提取位置 1000,2000 处 100x400 像素的区域:

    stream -map b -extract 100x400+1000+2000 bigboy.tif blue.bin
    ls -l 
    -rw-r--r--    1 mark  staff       40000  7 Sep 13:54 blue.bin
    

    同样,也许更理想的是,您可以使用vips 像这样提取红色波段:

    vips im_extract_bands bigboy.tif red.tif 1 1 --vips-leak
    memory: high-water mark 241.32 MB
    
    ls -l
    -rw-r--r--    1 mark  staff  1000001466  7 Sep 14:35 red.tif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-15
      • 2021-03-22
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多