- OpenCV Python 教程
- OpenCV Python - 首頁
- OpenCV Python - 概述
- OpenCV Python - 環境配置
- OpenCV Python - 讀取影像
- OpenCV Python - 寫入影像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 影像屬性
- OpenCV Python - 位運算
- OpenCV Python - 形狀和文字
- OpenCV Python - 滑鼠事件
- OpenCV Python - 新增軌跡條
- OpenCV Python - 調整大小和旋轉
- OpenCV Python - 影像閾值
- OpenCV Python - 影像濾波
- OpenCV Python - 邊緣檢測
- OpenCV Python - 直方圖
- OpenCV Python - 顏色空間
- OpenCV Python - 影像變換
- OpenCV Python - 影像輪廓
- OpenCV Python - 模板匹配
- OpenCV Python - 影像金字塔
- OpenCV Python - 影像加法
- OpenCV Python - 影像混合
- OpenCV Python - 傅立葉變換
- OpenCV Python - 捕捉影片
- OpenCV Python - 播放影片
- OpenCV Python - 從影片中提取影像
- OpenCV Python - 從影像生成影片
- OpenCV Python - 人臉檢測
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特徵檢測
- OpenCV Python - 特徵匹配
- OpenCV Python - 數字識別
- OpenCV Python 資源
- OpenCV Python - 快速指南
- OpenCV Python - 資源
- OpenCV Python - 討論
OpenCV Python - 滑鼠事件處理
OpenCV 可以使用回撥函式註冊各種與滑鼠相關的事件。這是為了根據滑鼠事件的型別啟動某個使用者定義的動作。
| 序號 | 滑鼠事件及描述 |
|---|---|
| 1 | cv.EVENT_MOUSEMOVE 當滑鼠指標移動到視窗上時。 |
| 2 | cv.EVENT_LBUTTONDOWN 指示左鍵被按下。 |
| 3 | cv.EVENT_RBUTTONDOWN 指示右鍵被按下。 |
| 4 | cv.EVENT_MBUTTONDOWN 指示中鍵被按下。 |
| 5 | cv.EVENT_LBUTTONUP 當左鍵被釋放時。 |
| 6 | cv.EVENT_RBUTTONUP 當右鍵被釋放時。 |
| 7 | cv.EVENT_MBUTTONUP 指示中鍵被釋放。 |
| 8 | cv.EVENT_LBUTTONDBLCLK 當左鍵雙擊時發生此事件。 |
| 9 | cv.EVENT_RBUTTONDBLCLK 指示右鍵被雙擊。 |
| 10 | cv.EVENT_MBUTTONDBLCLK 指示中鍵被雙擊。 |
| 11 | cv.EVENT_MOUSEWHEEL 正數表示向前滾動,負數表示向後滾動。 |
要在滑鼠事件上觸發函式,必須藉助setMouseCallback()函式進行註冊。該命令如下所示:
cv2.setMouseCallback(window, callbak_function)
此函式將事件的型別和位置傳遞給回撥函式以進行進一步處理。
示例 1
以下程式碼在顯示影像作為背景的視窗上發生左鍵雙擊事件時繪製一個圓:
import numpy as np
import cv2 as cv
# mouse callback function
def drawfunction(event,x,y,flags,param):
if event == cv.EVENT_LBUTTONDBLCLK:
cv.circle(img,(x,y),20,(255,255,255),-1)
img = cv.imread('lena.jpg')
cv.namedWindow('image')
cv.setMouseCallback('image',drawfunction)
while(1):
cv.imshow('image',img)
key=cv.waitKey(1)
if key == 27:
break
cv.destroyAllWindows()
輸出
執行上述程式並在隨機位置雙擊。將會出現類似的輸出:
示例 2
以下程式根據使用者輸入(1、2 或 3)互動式地繪製矩形、線或圓:
import numpy as np
import cv2 as cv
# mouse callback function
drawing=True
shape='r'
def draw_circle(event,x,y,flags,param):
global x1,x2
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
x1,x2 = x,y
elif event == cv.EVENT_LBUTTONUP:
drawing = False
if shape == 'r':
cv.rectangle(img,(x1,x2),(x,y),(0,255,0),-1)
if shape == 'l':
cv.line(img,(x1,x2),(x,y),(255,255,255),3)
if shape=='c':
cv.circle(img,(x,y), 10, (255,255,0), -1)
img = cv.imread('lena.jpg')
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
cv.imshow('image',img)
key=cv.waitKey(1)
if key==ord('1'):
shape='r'
if key==ord('2'):
shape='l'
if key==ord('3'):
shape='c'
#print (shape)
if key == 27:
break
cv.destroyAllWindows()
如果按下“1”,則在視窗表面上,在滑鼠左鍵按下和彈起的座標之間繪製一個矩形。
如果使用者選擇 2,則使用座標作為端點繪製一條線。
選擇 3 繪製圓形時,它將在滑鼠彈起事件的座標處繪製。
成功執行上述程式後,輸出影像如下:
廣告