因此,我编写了代码以将球切出并粘贴到其他位置。但是,尽管提供了正确的尺寸,但仍然出现错误。
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)
如果有人可以帮助我,我将非常感激。谢谢!
图片供参考:
答案 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都从不同的起始坐标开始裁剪图像。