opencv3.4+python3.6 中文教程4之鼠标操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37606112/article/details/79589688

目标
学习opencv中的对鼠标事件的操作
学习 cv.setMouseCallback()函数的用法
函数说明
这里写图片描述
鼠标事件
鼠标动作的执行在opencv中有着固定的格式,鼠标事件包括常见的左键点击、右键点击、双击、中建拖动等,常见的类型如下:
这里写图片描述
标志
常见的标志如左键按下、右键释放等。
这里写图片描述
用法
给出一个示例,当按下左键时,移动鼠标并释放,则绘出一个矩形,否则绘出圆形。代码如下。

# -*- coding: utf-8 -*-

'''
编码 : aikes
日期 : 20180310
功能 : opencv3.4教程
环境 :win10+python3.6+opencv3.4+VS2017
'''

import numpy as np
import cv2 as cv

drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')

# mouse callback function
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode

    if event == cv.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy = x,y

    elif event == cv.EVENT_MOUSEMOVE:
        if drawing == True: 
            if mode == True: 
                cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv.circle(img,(x,y),abs(x-ix),(0,0,255),-1)

    elif event == cv.EVENT_LBUTTONUP:
        drawing = False
        if mode == True:
            cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
        else:
            cv.circle(img,(x,y),abs(x-ix),(0,0,255),-1)
    elif event == cv.EVENT_RBUTTONDOWN:
        mode = not mode

def main(): 
    cv.setMouseCallback('image',draw_circle)
    while(True):
        cv.imshow('image',img)
        if cv.waitKey(1) == 27:
            cv.destroyAllWindows()
            break    

if __name__=="__main__":
    main()

运行
​运行后的效果如图。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/m0_37606112/article/details/79589688