我正在尝试使用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()
答案 0 :(得分:0)
答案 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()
<强>插图:强>
假设我有以下图片:
现在,当代码执行r = cv2.selectROI(im, False, False)
时,图像会出现在您可以使用鼠标进行裁剪的位置:
点击&#39;输入&#39;键(或任何其他键),显示裁剪的图像:
这就是它的全部!!
r
返回一个元组,在本例中为:(31, 65, 125, 120)
其中,
(31, 65, 125, 120)
^ ^ ^ ^
| | | |
x1 y1 | y2 = 120 + 65
x2 = 125 + 31