我有一些非常大型GeoTiff马赛克(50,000 x 50,000个单元,多达4个波段)。对这些图像使用None
时,OpenCV返回imread
,但成功读取较小的图像(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)
?
答案 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的功能。您需要依赖其他库来实现这一目标。