opencv3.4+python3.6 中文教程4之滑鼠操作
阿新 • • 發佈:2019-01-07
目標
學習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()
執行
執行後的效果如圖。