裁剪时无法匹配数组的尺寸

时间:2019-07-01 06:35:52

标签: python python-3.x opencv

因此,我编写了代码以将球切出并粘贴到其他位置。但是,尽管提供了正确的尺寸,但仍然出现错误。

import cv2

img=cv2.imread('messi.jpg',1)

ball=img[448:511,426:486]
img[190:253,450:510]=ball
cv2.imshow('messi',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

执行此操作时出现错误:

  

第6行,在       img [190:253,450:510] =球ValueError:无法将输入数组从形状(49,60,3)广播到形状(63,60,3)

如果有人可以帮助我,我将非常感激。谢谢!
图片供参考:

image

2 个答案:

答案 0 :(得分:1)

输入图像的高度仅为497像素,但是您尝试访问以下行中的511行:

ball=img[448:511, 426:486]
             ^

结果是,numpy只选择最多行数最多的行,即497。因此,由于(49,60,3),您得到的投资回报率为497 - 448 = 49

确保正确处理边框。提醒一下,使用numpy索引访问OpenCV图像时,行是第一维,列是第二维,即访问模式如下:

ball = img[rowStart : rowEnd, columnStart : columnEnd]

答案 1 :(得分:-1)

您确定要使用相同的库裁剪图像吗?不建议使用两个不同的库。例如:PIL和CV2都从不同的起始坐标开始裁剪图像。