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
适用于相同大马赛克的裁剪版本,这似乎是图像大小的问题,而不是图像本身。我有两个问题:
imread
可以处理的最大图像是多少?
is there a way to read a subset/ROI of an image in OpenCV (similar to band.ReadAsArray(xoff, yoff, xcount, ycount)
在 GDAL 中?
最大大小受 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 的功能。您需要依靠其他库来做到这一点。
我有一些 非常 大的 GeoTiff 马赛克(50,000 x 50,000 个单元格,多达 4 个条带)。当对这些图像使用 imread
时,OpenCV returns None
,但成功读取较小的图像 (2,880 x 3,840)。由于 imread
适用于相同大马赛克的裁剪版本,这似乎是图像大小的问题,而不是图像本身。我有两个问题:
imread
可以处理的最大图像是多少?is there a way to read a subset/ROI of an image in OpenCV (similar to band.ReadAsArray(xoff, yoff, xcount, ycount)
在 GDAL 中?
最大大小受 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 的功能。您需要依靠其他库来做到这一点。