# 可以通过鼠标进行基本的图形绘制
# 1.可以画线:当用户按下l键,即选择画线,滑动鼠标即可画线
# 2.可以画矩形:当用户按下r键,即选择画矩形,滑动鼠标即可画矩形
# 3.可以画圆:当用户按下c键,即选择画圆,滑动鼠标即可画圆

import cv2
import numpy as np

# 显示背景
img=np.zeros((360,640,3),np.uint8)


curshape=0
startpos=(0,0)

# 鼠标回调函数
def mouse_callback(event,x,y,flags,userdata):
    global curshape
    global startpos
    # 获取鼠标左键按下的坐标点
    if event & cv2.EVENT_LBUTTONDOWN==cv2.EVENT_LBUTTONDOWN:
        startpos=(x,y)
    # 获取鼠标左键弹起的坐标点,并画图形
    elif event & cv2.EVENT_LBUTTONUP==cv2.EVENT_LBUTTONUP:
        if curshape==0:
            cv2.line(img,startpos,(x,y),(0,0,255))
        elif curshape==1:
            cv2.rectangle(img,startpos,(x,y),(0,0,255))
        elif curshape==2:
            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.resizeWindow(\'drawshape\',640,360)

# 设置鼠标回调
cv2.setMouseCallback(\'drawshape\',mouse_callback,\'123\')


while 1:
    cv2.imshow(\'drawshape\',img)
    key=cv2.waitKey(1)
    if key==ord(\'q\'):
        break
    elif key==ord(\'l\'):
        curshape=0
    elif key==ord(\'r\'):
        curshape=1
    elif key==ord(\'c\'):
        curshape=2

cv2.destroyAllWindows()

评论
头像
验证码:
相关推荐

blender骨骼导入到threejs方法

threejs制作动态旋转银河系

threejs制作鼠标交互的网页banner




如果未经特殊说明,本站内容皆为原创,转载内容如果侵犯了您的权益,如有侵权请联系管理员删除
联系QQ:2380712278

备案号:皖ICP备19012824号