OpenCV 可以读取的最大图像是多少?

What is the largest image that can be read in OpenCV?

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

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

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

  • 元素个数:矩阵中的元素个数。对于二维矩阵就是 rows * cols.

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

在您的情况下,假设矩阵 uchar 具有 4 个通道,大小将为:8 * 4 * 50000 * 50000 = 80000000000 > 4294967296,这太大了。

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


不,OpenCV 不提供仅从磁盘读取图像的 ROI 的功能。您需要依靠其他库来做到这一点。