OpenCV中可以读取的最大图像是什么?

时间:2016-03-14 13:01:47

标签: image opencv gdal

我有一些非常大型GeoTiff马赛克(50,000 x 50,000个单元,多达4个波段)。对这些图像使用None时,OpenCV返回imread,但成功读取较小的图像(2,880 x 3,840)。由于imread适用于相同大型马赛克的裁剪版本,因此它似乎是图像尺寸的问题,而不是图像本身。我有两个问题:

  • imread可以处理的最大图片是什么?

  • GDAL中的
  • is there a way to read a subset/ROI of an image in OpenCV (similar to band.ReadAsArray(xoff, yoff, xcount, ycount)

1 个答案:

答案 0 :(得分:4)

最大尺寸受size_t的最大值限制。您可以看到OpenCV函数setSize,其大小取决于:

  • 元素大小:基础类型的大小乘以通道数。例如。 Mat4b(或Mat类型CV_8UC4)为8*4 = 32

  • 元素数量:矩阵中元素的数量。对于2D矩阵,只需rows * cols

对于32位构建,矩阵的总大小:sizeof(type) * channels * rows * cols应小于2^32 = 4294967296

在您的情况下,假设uchar矩阵包含4个频道,其大小将为:8 * 4 * 50000 * 50000 = 80000000000 > 4294967296,并且该值太大。

你可以使用64位版本获得更大的图像。

不,OpenCV不提供仅从磁盘读取图像的ROI的功能。您需要依赖其他库来实现这一目标。