1. 程式人生 > >opencv3.4+python3.6 中文教程4之滑鼠操作

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

目標
學習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()

執行
​執行後的效果如圖。
這裡寫圖片描述