OpenCV调整大小在大图像上失败,并显示“错误:(-215)ssize.area()> 0在函数cv :: resize中”
image
image-processing
opencv
python-3.x
6
0

我正在使用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:函数cv :: resize中的C:\ opencv-3.0.0 \ source \ modules \ imgproc \ src \ imgwarp.cpp:3208:错误:(-215)ssize.area()> 0”

我确定图像数组中有图像内容,因为我可以将它们保存为jpg格式的小图块。当我尝试调整图像的一小部分大小时,没有问题,并且最终得到正确调整大小的图像。 (取一个相当大的块(50000,50000,3)仍然行不通,但可以对(10000,10000,3)个块工作)

我想知道什么会导致此问题,以及如何解决?

谢谢

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

事实证明,这个错误实际上是在说真话-我正在尝试调整Null图像的大小,该图像通常是视频文件的“最后一个”帧,因此断言是有效的。

现在,在尝试进行大小调整操作之前,我还有一个额外的步骤,该步骤是自己执行断言:

def getSizedFrame(width, height):
"""Function to return an image with the size I want"""    
    s, img = self.cam.read()

    # Only process valid image frames
    if s:
            img = cv2.resize(img, (width, height), interpolation = cv2.INTER_AREA)
    return s, img

现在我看不到错误。

收藏
评论

我知道这是一个非常老的线程,但是我有同样的问题,这是图像名称中的空格所致。

例如

图片名称:“ hello o.jpg”

奇怪的是,通过删除空格,该功能运行良好。

图片名称:“ hello_o.jpg”

收藏
评论

还请注意numpy数组的对象类型,使用.astype('uint8')对其进行转换为我解决了此问题。

收藏
评论

因此,事实证明问题出在modules\imgproc\src\imgwarp.cpp

CV_Assert( ssize.area() > 0 );

当要调整大小的图像的行和列的乘积大于2 ^ 31时,ssize.area()得出负数。这似乎是OpenCV中的错误,希望在以后的版本中得到修复。暂时的解决方法是在注释掉该行的情况下构建OpenCV。虽然不理想,但对我有用。

我最近才发现上述内容仅适用于宽度大于高度的图像。对于高度大于宽度的图像,以下行会导致错误:

CV_Assert( dsize.area() > 0 );

因此,也必须对此进行注释。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号