为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在将图像声明为变量名称时不能使用 OpenCV 在某些位置复制和粘贴图像?

为什么在将图像声明为变量名称时不能使用 OpenCV 在某些位置复制和粘贴图像?

撒科打诨 2021-10-12 16:29:31
我正在尝试裁剪两个图像的特定部分并使用 OpenCV 交换这些图像在主图像中的位置。下面是我用来执行上述要求的代码    image1 = img[198:238, 456:654]    image2 = img[120:282, 487:534]    resized_image = cv2.resize(image1, (90, 221))     resized_image1 = cv2.resize(image2, (211, 90))     img[120:282, 487:534] = resized_image    img[198:238, 456:654] = resized_image1    cv2.imwrite('01.png',img)上面的代码成功地交换了两个图像的位置,但是当我动态传递值时,我将图像的位置声明为变量,当我使用这个变量图像时说“位置”不会被交换,如下例所示    position[0] = img[198:238, 456:654]    position[1] = img[120:282, 487:534]    image1 = position[0]    image2 = position[1]    resized_image = cv2.resize(image1, (90, 221))     resized_image1 = cv2.resize(image2, (211, 90))     position[1] = resized_image    position[0] = resized_image1    cv2.imwrite('01.png',img)在没有发生交换之前,这里的图像保持不变。image1 = position[0]将在给定位置裁剪图像,但是当我尝试使用position[1] = resized_image没有实际发生的图像粘贴图像 时,预期会交换图像。那么为什么不发生交换。我该如何解决呢?
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

使用 img[198:238, 456:654] 返回一个新图像,而不是对原始图像的引用。所以 position[0] 实际上保存了一个带有交换感兴趣区域的新图像。

您可以通过创建一个包含每个 RoI 的 x/y 值的元组列表来解决这个问题,并使用它们来调整和交换 RoI 的大小。


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信