Opencv鼠标作为画笔

该代码示例展示了如何利用OpenCV库通过鼠标事件来绘制矩形和圆形。用户可以选择模式(1为矩形,2为圆形),然后通过左键点击并拖动来确定图形的位置和大小。在左键释放时绘制图形,确保了图形的完整。当用户按下1或2键时,切换绘制模式;按下q键退出程序。注意,半像素问题通过将距离转换为整数解决。
摘要由CSDN通过智能技术生成
a='0'  #a表示用户选择的图形 1--矩形 2--圆形
startpos=(0,0)  #用元祖表示左键击下的初始坐标
def draw_shape(event,x,y,flags,param):  #创建回调函数
    global a,startpos
    # 声明全局变量
    if event == cv.EVENT_LBUTTONDOWN :  #左键击下
        startpos=(x,y)
    elif event ==cv. EVENT_MOUSEMOVE:   #鼠标移动
        if a=='1':
            cv.rectangle(img,startpos,(x,y),(0,255,0),3)
        elif a=='2':
            m=x-startpos[0]
            n=y-startpos[1]
            r=(m**2+n**2)**0.5
            cv.circle(img, startpos, r, (0, 0, 255), -1)
img = np.zeros((512,512,3), np.uint8)    #黑色图像
cv.namedWindow('image')
cv.setMouseCallback('image',draw_shape)
while(1):
    cv.imshow('image',img)
    if cv.waitKey(20)=='1':
        a='1'
    elif cv.waitKey(20)=='2':
        a='2'

画不上图形

修改:

 

 终点坐标弄成左键弹起,不是鼠标移动

整数除以2可能会存在有小数

a='0'  #a表示用户选择的图形 1--矩形 2--圆形
startpos=(0,0)  #用元祖表示左键击下的初始坐标
def draw_shape(event,x,y,flags,param):  #创建回调函数
    global a,startpos
    # 声明全局变量
    if event == cv.EVENT_LBUTTONDOWN :  #左键击下
        startpos=(x,y)
    elif event ==cv. EVENT_LBUTTONUP:   #左键弹起
        if a=='1':
            cv.rectangle(img,startpos,(x,y),(0,255,0),3)
        elif a=='2':
            m=x-startpos[0]
            n=y-startpos[1]
            r=int((m**2+n**2)**0.5)
            cv.circle(img, startpos, r, (0, 0, 255), -1)

img = np.zeros((512,512,3), np.uint8)    #黑色图像
cv.namedWindow('image')
cv.setMouseCallback('image',draw_shape)
while(1):
    cv.imshow('image',img)
    k=cv.waitKey(20)
    if k==ord('1'):
        a='1'
    elif k==ord('2'):
        a='2'
    elif k==ord('q'):
        break

点的情况,半个像素无法处理,必须将r转化成整数int型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值