12.Opencv大作业——实现鼠标绘制基本图形

#基本功能:

#可以通过鼠标进行基本图形的绘制

#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基本图形绘制小结

画线、矩形、圆

画椭圆、多边形、多边形填充

画文字(中文有问题)

后期需学习:基本图像运算与处理、形态学、轮廓查找

猜你喜欢

转载自blog.csdn.net/qq_45355603/article/details/124431946