python opencv实现涂鸦程序
时间: 2023-07-07 15:08:50 浏览: 105
要实现涂鸦程序,需要使用 OpenCV 库来处理图像和鼠标事件。下面是一个基本的例子:
```python
import cv2
drawing = False # 是否正在涂鸦
mode = True # True:画矩形,False:画圆形
ix, iy = -1, -1 # 起始坐标
def draw(event, x, y, flags, param):
global ix, iy, drawing, mode
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
if mode == True:
cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
else:
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
if mode == True:
cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
else:
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
img = cv2.imread('test.jpg')
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw)
while True:
cv2.imshow('image', img)
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
cv2.destroyAllWindows()
```
这个例子使用了 `cv2.namedWindow` 创建了一个窗口,并使用 `cv2.setMouseCallback` 注册了一个回调函数 `draw`,用于处理鼠标事件。当鼠标左键按下时,设置 `drawing` 为 True,记录起始坐标。当鼠标移动时,如果 `drawing` 为 True,则根据 `mode` 的值画矩形或圆形。当鼠标左键松开时,设置 `drawing` 为 False,根据 `mode` 的值画矩形或圆形。
你可以根据自己的需要修改该程序,实现更多功能。
阅读全文