创建一个黑色画板实现自动画图功能
import cv2
import numpy as np
"""
1. 创建一个黑色画板
2. 输入q退出程序
3. 输入m切换画图模式
这个时候在滑动鼠标就会在画板上画出圆形线条!
"""
px, py, rx, ry = 0, 0, 0, 0
draw_line = False
# 绑定窗体
cv2.namedWindow("image")
canvas = np.zeros((400, 400, 3))
def draw_shape(event, x, y, flags, param):
global canvas, draw_line # 全局变量
if draw_line and event == cv2.EVENT_MOUSEMOVE: # 判断是否是鼠标移动事件
cv2.circle(canvas, center=(x, y), radius=5, color=(255, 255, 255)) # 画圆
cv2.setMouseCallback('image', draw_shape) # 监听鼠标事件
while 1:
cv2.imshow("image", canvas)
k = cv2.waitKey(1)
if k == ord("q"): # 按下q则退出程序
break
if k == ord('m'):
draw_line = not draw_line # 判断用户是否按下m,如果按下切换模式
这段代码创建了一个黑色画板,支持在画板上通过滑动鼠标画出圆形线条。用户可以按下 'q' 键退出程序,按下 'm' 键切换画图模式,此时在滑动鼠标会在画板上画出圆形线条。
以下是代码的主要步骤:
-
初始化全局变量:
px
,py
,rx
,ry
用于保存左键按下和释放时的坐标,draw_line
用于标记是否处于画图模式。 -
创建一个黑色画板:
canvas = np.zeros((400, 400, 3))
。 -
定义鼠标事件处理函数
draw_shape
,在函数中根据当前是否处于画图模式以及鼠标事件类型,在画板上画出圆形线条。 -
设置鼠标事件回调函数:
cv2.setMouseCallback('image', draw_shape)
。 -
进入死循环,不断显示当前画板,并等待用户的键盘输入。
-
如果用户按下 'q' 键,则退出程序;如果按下 'm' 键,则切换画图模式。
这个简单的画板演示了如何使用 OpenCV 处理鼠标事件,根据用户的输入在画板上绘制图形。