#基本功能:
#可以通过鼠标进行基本图形的绘制
#1.可以画线:当用户按下L键时,即选择了画线,此时滑动鼠标即可画线
#2.可以画矩形:当用户按下r键,即可选择画矩形,此时滑动鼠标即可画矩形
#3.可以画圆:当用户按下c键,即可选择画圆。此时滑动鼠标即可画圆
# curshape: 0-drawline 1-drawrectangle 2-drawcircle
#基本功能:
#可以通过鼠标进行基本图形的绘制
#1.可以画线:当用户按下L键时,即选择了画线,此时滑动鼠标即可画线
#2.可以画矩形:当用户按下r键,即可选择画矩形,此时滑动鼠标即可画矩形
#3.可以画圆:当用户按下c键,即可选择画圆。此时滑动鼠标即可画圆
# curshape: 0-drawline 1-drawrectangle 2-drawcircle
from inspect import stack
import cv2
import numpy as np
curshape = 0 #全局变量,当前图形
startpos = (0,0) #鼠标点
#显示窗口和背景
img = np.zeros((480,640,3),np.uint8) #设置一个全黑的窗口
#鼠标回调函数
#当点击鼠标按下时,应该获取到起始点,当抬起鼠标按键时,应获取到鼠标终止点,在起始点和终止点之间画一条线
def mouse_callback(event,x,y,flags,userdata):
#print(event,x,y,flags, userdata)
if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):
global curshape, startpos #全局变量的声明
startpos = (x,y) #每次按下鼠标左键都会获得一个值
elif (event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP):
if curshape ==0: #drawline
cv2.line(img,startpos,(x,y),(0,0,255))
elif curshape ==1: #drawrectangle
cv2.rectangle(img,startpos,(x,y),(0,0,255))
elif curshape ==2: #drawcircle
a = (x- startpos[0])
b = (y- startpos[1])
r= int((a**2+b**2)**0.5) #计算圆的半径
cv2.circle(img,startpos,r,(0,0,255))
else:
print('error:no shape')
#创建窗口
cv2.namedWindow('drawshape',cv2.WINDOW_NORMAL)
#设置鼠标回调
cv2.setMouseCallback('drawshape',mouse_callback,"123")
while True:
cv2.imshow('drawshape',img)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'): #退出
break
elif key == ord('l'): #line
curshape = 0
elif key == ord('r'): #rectangle
curshape = 1
elif key == ord('c'): #circle
curshape = 2
cv2.destroyAllWindows()
运行结果:
Opencv基本图形绘制小结
画线、矩形、圆
画椭圆、多边形、多边形填充
画文字(中文有问题)
后期需学习:基本图像运算与处理、形态学、轮廓查找