NO.4 鼠标的绘图操作

版权声明:转载请注明出处:http://blog.csdn.net/liu6886 https://blog.csdn.net/liu6886/article/details/53057241

我们来创建一个程序,它会在你双击过的位置绘制一个圆圈。
在这之前,我们先来创建一个鼠标事件回调函数,但鼠标事件发生是他就会被执行。鼠标事件可以是鼠标上的任何动作,比如按下左键、按下右键、双击左键。我们可以通过鼠标事件获得与鼠标对应的图片上的坐标。你可以通过执行下列代码查看所有被支持的鼠标事件。

>>> import cv2
>>> events = [i for i in dir(cv2) if 'EVENT' in i]
>>> print events
['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP', 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']

所有的鼠标事件回调函数都有一个统一的格式,他们所不同的地方仅仅是被调用后的功能。我们的鼠标回调函数只用做一件事:在双击过的地方绘制一个圆圈。下面是代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 06 21:57 2016
@author: Jack L
"""

import numpy as np
import cv2
#鼠标回调函数
def draw_circle(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img, (x,y), 100, (255,0,0), -1)

#创建图像与窗口并将窗口与回调函数绑定
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

while(1):
    cv2.imshow('image', img)
    if cv2.waitKey(20)&0xFF==27:
        break
cv2.destroyAllWindows()

双击左键前:
这里写图片描述

双击左键后:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/liu6886/article/details/53057241
今日推荐