摘要:回調函數顯示窗口名稱鼠標響應處理函數鼠標回調函數,該函數在鼠標事件發生時執行。鼠標事件可以是與鼠標相關的任何內容,如左鍵向下,左鍵向上,左鍵雙擊等。通過這個活動和地點,我們可以做任何我們喜歡的事情。
Mouse as a Paint-Brush
1回調函數cv2.setMouseCallback(windowName, onMouse [, param])
windowName:顯示窗口名稱
onMouse:鼠標響應處理函數
鼠標回調函數,該函數在鼠標事件發生時執行。 鼠標事件可以是與鼠標相關的任何內容,如左鍵向下,左鍵向上,左鍵雙擊等。它為我們提供了每個鼠標事件的坐標(x,y)。 通過這個活動和地點,我們可以做任何我們喜歡的事情。
下面代碼輸出了鼠標事件的種類
代碼:
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"]
參數 | 含義 | |
---|---|---|
CV_EVENT_MOUSEMOVE | 0 | 滑動 |
EVENT_LBUTTONDOWN | 1 | 左鍵點擊 |
EVENT_RBUTTONDOWN | 2 | 右鍵點擊 |
EVENT_MBUTTONDOWN | 3 | 中間點擊 |
EVENT_LBUTTONUP | 4 | 左鍵釋放 |
EVENT_RBUTTONUP | 5 | 右鍵釋放 |
EVENT_MBUTTONUP | 6 | 中間釋放 |
EVENT_LBUTTONDBLCLK | 7 | 左鍵雙擊 |
EVENT_RBUTTONDBLCLK | 8 | 右鍵雙擊 |
EVENT_MBUTTONDBLCLK | 9 | 中間雙擊 |
創建了一個簡單的應用程序,只要我們雙擊它就可以在圖像上繪制一個圓圈.
代碼:
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(1): cv2.imshow("image",img) if cv2.waitKey(20) & 0xFF == 27: break cv2.destroyAllWindows()
雙擊鼠標左鍵:
應用二通過拖動鼠標繪制矩形或圓形(取決于我們選擇的模式),就像在Paint應用程序中一樣。 所以我們的鼠標回調函數有兩個部分,一個用于繪制矩形,另一個用于繪制圓形.在主循環中,設置鍵"m"設置鍵盤綁定以在矩形和圓之間切換.
代碼:
import numpy as np import cv2 drawing = 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,mode if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix,iy = x,y elif 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 = False 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) img = np.zeros((512,512,3), np.uint8) cv2.namedWindow("image") cv2.setMouseCallback("image",draw_circle) while(1): cv2.imshow("image",img) k = cv2.waitKey(1) & 0xFF if k == ord("m"): mode = not mode elif k == 27: break cv2.destroyAllWindows()
按住鼠標左鍵滑動
按“m”鍵,再次按住鼠標左鍵滑動
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41962.html
小編寫這篇文章的一個主要目的,主要是給大家就相關的具體內容做出一些詳細解答,比如了解使用python的相關知識,主要是涉及到python Opencv的一些相關知識,比如使用python Opencv實現停車位識別,就具體的內容,下面給大家詳細解答下。 1.怎么去實現 (1)第一是需要用到一個處理畫框的程序,將圖片中的有車和無車的停車位給畫出來,并且保存坐標(如果畫錯了,將鼠標移至要刪除的...
怎么從0到1學習Python呢?Python中的知識點,涉及到內容主要是Python Opencv,用于人工智能,機器學習模擬相關的數據,那么,里面的一些較為基礎的知識點,涉及到的內容是什么呢?下面就給大家詳細解答下。 OpenCV是一個流行的開源計算機視覺庫,可用于不同的編程語言,例如Python、C++和JavaScript。它提供了一套豐富的工具來處理和分析圖像和視頻,讓你可以從調整單...
閱讀 3499·2023-04-25 15:52
閱讀 581·2021-11-19 09:40
閱讀 2573·2021-09-26 09:47
閱讀 1023·2021-09-22 15:17
閱讀 3548·2021-08-13 13:25
閱讀 2200·2019-08-30 15:56
閱讀 3460·2019-08-30 13:56
閱讀 2095·2019-08-30 11:27