# 基本功能
# 可以用过鼠标进行基本图形的绘制
# 1. 可以画线,当用户l键,即选择画线,此时,滑动鼠标既可画线
# 2. 可以矩形,当用户r键,即选择画矩形,此时,滑动鼠标既可画矩形
# 3. 可以画圆,当用户c键,即选择画圆,此时,滑动鼠标既可画圆
# 4. 当用户q键 退出程序
# curshape 0-drawline,1-drawrect,2-circle
import cv2 as cv
import numpy as np
curshape = 0
startpos = (0, 0)
color = (0,0,255)
# 显示窗口和北京
img = np.zeros((480,640,3),np.uint8)
# 鼠标回调函数
def mouse_callback(event,x,y,flags,userdata):
global startpos
if event & cv.EVENT_LBUTTONDOWN == cv.EVENT_LBUTTONDOWN:
startpos =(x,y)
elif event & cv.EVENT_LBUTTONUP == cv.EVENT_LBUTTONUP:
if curshape == 0:
cv.line(img,startpos,(x,y),color)
elif curshape == 1:
cv.rectangle(img, startpos,(x,y), color)
elif curshape == 2:
a = x-startpos[0]
b = y-startpos[1]
r = int((a**2+b**2)**0.5)
cv.circle(img,startpos, r, color)
# print(event,x,y,flags,userdata)
# 创建窗口
cv.namedWindow("drawshape",cv.WINDOW_NORMAL)
# 设置鼠标回调
cv.setMouseCallback('drawshape',mouse_callback,'123')
while True:
cv.imshow("drawshape",img)
key = cv.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('l'):
curshape = 0
elif key == ord('r'):
curshape = 1
elif key == ord('c'):
curshape = 2