我正在使用 OpenCV 3.0.0 和 Python 3.4.3 来处理非常大的 RGB 图像 (107162,79553,3)。当我尝试使用以下代码调整它的大小时:
import cv2
image = cv2.resize(img, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
我收到此错误消息:
cv2.error: C:\opencv-3.0.0\source\modules\imgproc\src\imgwarp.cpp:3208: error: (-215) ssize.area() > 0 函数 cv::resize
我确定图像数组中有图像内容,因为我可以将它们保存为 jpg 格式的小图块。当我尝试调整图像的一小部分大小时,没有问题,我最终得到了正确调整大小的图像。 (拿一个相当大的块(50000,50000,3)仍然行不通,但它会在(10000,10000,3)块上工作)
是什么导致了这个问题,我该如何解决?
原文由 user3667217 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以事实证明问题来自
modules\imgproc\src\imgwarp.cpp
中的一行:当要调整大小的图像的行和列的乘积大于 2^31 时,ssize.area() 的结果为负数。这似乎是 OpenCV 中的一个错误,希望在未来的版本中得到修复。一个临时的修复方法是在构建 OpenCV 时将这一行注释掉。虽然不理想,但对我有用。
而且我最近才发现以上仅适用于宽度大于高度的图像。对于高度大于宽度的图像,以下行会导致错误:
所以这也必须被注释掉。