OpenCV:selectROI返回零元组

时间:2018-06-14 07:15:15

标签: python opencv

我正在尝试使用selectROI裁剪感兴趣的区域。但是在我的代码selectROI中总是返回(0,0,0,0)作为元组。我尝试了不同的图像,但问题仍然存在。有人可以帮助我吗?

    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    img = cv2.imread('diff-overlay.jpg')
    r = cv2.selectROI("Image", img, False, False)
    imCrop = img[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]
    cv2.imshow("Image", imCrop)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2 个答案:

答案 0 :(得分:0)

图片右上角是原点

X向下增加

Y从左到右增加

左上角是x1,y1 左下角是x2,y2

所以image [y1:y2,x1:x2]应该会为您提供所选的感兴趣区域

Image ROI

答案 1 :(得分:0)

您需要使用鼠标裁剪显示图像上的区域。选择感兴趣的区域后,点击Enter键,它将返回裁剪后的图像。现在,当您检查r的值时,它会返回裁剪图像的左上角和右下角坐标的元组。

<强>代码:

if __name__ == '__main__' :

    # Read image
    im = cv2.imread("C:/Users/Desktop/Bengal_cat.png")

    # Select ROI
    r = cv2.selectROI(im, False, False)

    # Crop image
    imCrop = im[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]

    # Display cropped image
    cv2.imshow("Image", imCrop)
    cv2.waitKey(0)

    cv2.destroyAllWindows()

<强>插图:

假设我有以下图片:

enter image description here

现在,当代码执行r = cv2.selectROI(im, False, False) 时,图像会出现在您可以使用鼠标进行裁剪的位置:

enter image description here

点击&#39;输入&#39;键(或任何其他键),显示裁剪的图像:

enter image description here

这就是它的全部!!

  • 变量r返回一个元组,在本例中为:(31, 65, 125, 120)

其中,

(31, 65, 125, 120)
 ^   ^    ^    ^
 |   |    |    |
 x1  y1   |    y2 = 120 + 65
          x2 = 125 + 31