📅  最后修改于: 2023-12-03 15:06:50.572000             🧑  作者: Mango
在图像处理中,有时需要在图像上标记特定区域或对象。Python-OpenCV 提供了一个简单的方法,使用户可以使用鼠标在图像上进行绘制操作。
首先,您需要安装 cv2
和 numpy
模块。您可以使用以下命令安装这些模块:
pip install opencv-python
pip install numpy
下面是一个使用鼠标在图像中绘制矩形的示例代码:
import numpy as np
import cv2
# 创建回调函数
def draw_rectangle(event,x,y,flags,param):
global pt1,pt2,top_left_clicked,bottom_right_clicked
# 获取鼠标左键按下事件
if event == cv2.EVENT_LBUTTONDOWN:
# 如果鼠标左键按下,记录左上角坐标
if top_left_clicked == False:
pt1 = (x,y)
top_left_clicked = True
# 如果鼠标左键按下,记录右下角坐标
elif bottom_right_clicked == False:
pt2 = (x,y)
bottom_right_clicked = True
# 创建全局变量
pt1 = (0,0)
pt2 = (0,0)
top_left_clicked = False
bottom_right_clicked = False
# 连接到预设的 OpenCV 视频输入
cap = cv2.VideoCapture(0)
# 创建窗口并绑定到回调函数
cv2.namedWindow('Test')
cv2.setMouseCallback('Test',draw_rectangle)
while True:
ret,frame = cap.read()
# 如果两个角都已选择,绘制矩形
if top_left_clicked == True and bottom_right_clicked == True:
cv2.rectangle(frame,pt1,pt2,(0,0,255),3)
# 显示绘制结果
cv2.imshow('Test',frame)
# 按下 Esc 键退出程序
if cv2.waitKey(1) & 0xFF == 27:
break
# 清理并关闭窗口
cap.release()
cv2.destroyAllWindows()
代码解释:
draw_retangle
函数,它是用来处理鼠标事件的回调函数。main
函数中,我们连接到视频输入,创建窗口并将其绑定到回调函数。while
循环中,我们等待到用户绘制矩形的左上角和右下角位置。当这两个位置已经确定时,我们使用 cv2.rectangle
函数绘制矩形,并在图像上显示出来。Esc
键退出程序。下面是一个使用鼠标在图像中绘制圆形的示例代码:
import numpy as np
import cv2
# 创建回调函数
def draw_circle(event,x,y,flags,param):
global center,clicked
# 获取鼠标左键按下事件
if event == cv2.EVENT_LBUTTONDOWN:
# 在鼠标点击的位置创建一个圆形
cv2.circle(img,(x,y),50,(0,255,0),2)
# 创建空白图像
img = np.zeros((512,512,3), np.uint8)
# 创建窗口并绑定到回调函数
cv2.namedWindow(winname='my_drawing')
cv2.setMouseCallback('my_drawing',draw_circle)
while True:
# 显示当前绘制状态
cv2.imshow('my_drawing',img)
# 按下 Esc 键退出程序
if cv2.waitKey(20) & 0xFF == 27:
break
# 清理并关闭窗口
cv2.destroyAllWindows()
代码解释:
draw_circle
函数,它是用来处理鼠标事件的回调函数。while
循环中,我们等待用户点击鼠标,在鼠标点击的位置创建一个圆形,然后在图像上显示出来。Esc
键退出程序。以上就是使用 Python-OpenCV 在图像上用鼠标绘图的示例代码。这是一个非常有用的功能,可以帮助您在图像处理中标记特定区域或对象,并跟踪它们。