【发布时间】:2015-11-06 21:38:00
【问题描述】:
我正在使用 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: 错误: (-215) ssize.area() > 0 in function cv::resize
我确定图像数组中有图像内容,因为我可以将它们保存到 jpg 格式的小图块中。当我尝试只调整图像的一小部分时,没有问题,我最终得到了正确调整大小的图像。 (取一个相当大的块 (50000,50000,3) 仍然不起作用,但它会在 (10000,10000,3) 块上起作用)
什么可能导致这个问题,我该如何解决这个问题?
【问题讨论】:
-
猜测:整数范围为 +/- 2.147.483.647,而 cols x 行在您的示例中为 8.525.058.586。所以可能在 cv::resize 中存在整数溢出。您可以通过测试 cols x rows == 2.147.483.647 周围的图像大小来测试这一点
-
嘿米卡,你是对的!它适用于 (46340,46340,3) 但不适用于 (46341,46341,3)。这是否意味着将 int 更改为 int64 应该可以解决问题?
-
我不知道在 cv::resize 中计算区域的位置。我觉得你得看看opencv resize source code...
-
在macos哪里可以找到这个文件,我没有找到同名的文件?
标签: python python-3.x image opencv opencv3.0