日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【opencv系列05】OpenCV4.X鼠标回调函数

發(fā)布時(shí)間:2025/1/21 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【opencv系列05】OpenCV4.X鼠标回调函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方“AI搞事情”關(guān)注我們


一、回調(diào)函數(shù)

setMouseCallback(windowName, onMouse, param=None)

windowName:窗口名稱
onMouse:鼠標(biāo)響應(yīng)處理函數(shù)
鼠標(biāo)回調(diào)函數(shù),該函數(shù)在鼠標(biāo)事件發(fā)生時(shí)被調(diào)用。鼠標(biāo)事件可以是與鼠標(biāo)相關(guān)的任何操作,如左鍵向下,左鍵向上,左鍵雙擊等。它為我們提供了每個(gè)鼠標(biāo)事件的坐標(biāo)(x,y)。 通過這個(gè)事件和位置,我們可以做任何我們想做的事情。 通過以下代碼,可以列出所有的鼠標(biāo)事件。

「代碼」

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']

參數(shù) ? ?含義
EVENT_MOUSEMOVE ? ?0 ?滑動(dòng)
EVENT_LBUTTONDOWN ?1 ?左鍵點(diǎn)擊
EVENT_RBUTTONDOWN ?2 ?右鍵點(diǎn)擊
EVENT_MBUTTONDOWN ?3 ?中間點(diǎn)擊
EVENT_LBUTTONUP ? ?4 ?左鍵釋放
EVENT_RBUTTONUP ? ?5 ?右鍵釋放
EVENT_MBUTTONUP ? ?6 ?中間釋放
EVENT_LBUTTONDBLCLK ? ?7 ?左鍵雙擊
EVENT_RBUTTONDBLCLK ? ?8 ?右鍵雙擊
EVENT_MBUTTONDBLCLK ? ?9 ?中間雙擊

二、應(yīng)用

1. 應(yīng)用一

創(chuàng)建了一個(gè)簡(jiǎn)單的應(yīng)用程序,只要我們雙擊它就可以在圖像上繪制一個(gè)圓圈。

「代碼」

import numpy as np import cv2# mouse callback function def draw_circle(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:cv2.circle(img, (x, y), 100, (255, 0, 0), -1)# Create a black image, a window and bind the function to window img = np.zeros((512, 512, 3), np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image', draw_circle)while True:cv2.imshow('image', img)if cv2.waitKey(20) & 0xFF == 27:break cv2.destroyAllWindows()

2. 應(yīng)用二

通過拖動(dòng)鼠標(biāo)繪制矩形或圓形(根據(jù)我們選擇的模式),就像在繪圖應(yīng)用程序中一樣。 所以我們的鼠標(biāo)回調(diào)函數(shù)有兩個(gè)部分,一個(gè)用于繪制矩形,另一個(gè)用于繪制圓形。在主循環(huán)中,設(shè)置鍵'm'設(shè)置鍵盤綁定進(jìn)行矩形和圓之間切換。

「代碼」

import numpy as np import cv2drawing = False # true if mouse is pressed mode = True # if True, draw rectangle. Press 'm' to toggle to curve ix,iy = -1,-1# mouse callback function import numpy as np import cv2drawing = False # true if mouse is pressed mode = True # if True, draw rectangle. Press 'm' to toggle to curve ix,iy = -1,-1# mouse callback function def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event == cv2.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)elif event == cv2.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)img = np.zeros((512,512,3), np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image',draw_circle)while True:cv2.imshow('image',img)k = cv2.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:breakcv2.destroyAllWindows()

長(zhǎng)按二維碼關(guān)注我們

有趣的靈魂在等你

總結(jié)

以上是生活随笔為你收集整理的【opencv系列05】OpenCV4.X鼠标回调函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。