写一个点击鼠标左键开始画ROI的回调函数
时间: 2023-07-28 22:46:29 浏览: 50
好的,以下是一个基本的鼠标回调函数,可以在左键按下时开始画ROI:
```python
import cv2
# 定义全局变量
refPt = []
cropping = False
def click_and_crop(event, x, y, flags, param):
global refPt, cropping
if event == cv2.EVENT_LBUTTONDOWN:
# 记录起始点
refPt = [(x, y)]
cropping = True
elif event == cv2.EVENT_LBUTTONUP:
# 记录结束点
refPt.append((x, y))
cropping = False
# 绘制矩形框
cv2.rectangle(image, refPt[0], refPt[1], (0, 255, 0), 2)
cv2.imshow("image", image)
# 读取图片
image = cv2.imread("example.jpg")
# 创建窗口并绑定回调函数
cv2.namedWindow("image")
cv2.setMouseCallback("image", click_and_crop)
# 循环显示图片,等待按键退出
while True:
cv2.imshow("image", image)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
# 释放资源
cv2.destroyAllWindows()
```
在这个回调函数中,我们定义了两个全局变量 `refPt` 和 `cropping`,用于记录所绘制的矩形框的起始点和结束点,以及是否正在绘制矩形框。
在鼠标回调函数中,当左键按下时,我们记录下起始点,并将 `cropping` 设为 `True`,表示正在绘制矩形框。当左键释放时,我们记录下结束点,并将 `cropping` 设为 `False`,表示绘制完成。然后,我们使用 `cv2.rectangle()` 函数绘制矩形框,并显示在图片上。
最后,我们创建一个窗口并绑定回调函数,循环显示图片,等待按键退出。当用户按下 `q` 键时,我们退出循环并释放资源。