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

时间:2019-01-16 16:15:09

标签: python python-3.x image opencv

我正在尝试裁剪两个图像的特定部分,并使用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)

上面的代码成功地交换了两个图像的位置,但是当我动态传递值时,我声明将图像切片的位置作为变量,当我使用此变量图像时,说“ positiion”将不会被交换,如下例所示< / p>

    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 个答案:

答案 0 :(得分:0)

使用img [198:238,456:654]返回新图像,是对原始图像的引用。因此position [0]实际上会保存一个带有感兴趣区域的新图像。

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