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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【学习OpenCV4】键盘鼠标操作总结

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习OpenCV4】键盘鼠标操作总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文分享內容來自圖書《學習OpenCV 4:基于Python的算法實戰》,該書內容如下:

1章 OpenCV快速入門; 第2章 圖像讀寫模塊imgcodecs; 第3章 核心庫模塊core; 第4章 圖像處理模塊imgproc(一); 第5章 圖像處理模塊imgproc(二); 第6章 可視化模塊highgui; 第7章 視頻處理模塊videoio; 第8章 視頻分析模塊video; 第9章 照片處理模塊photo; 第10章 2D特征模塊features2d; 第11章 相機標定與三維重建模塊calib3d; 第12章 傳統目標檢測模塊objdetect; 第13章 機器學習模塊ml; 第14章 深度神經網絡模塊dnn

歡迎關注圖書**《深度學習計算機視覺實戰》與《學習OpenCV4:基于Python的算法實戰》**。

案例79:鍵盤操作

OpenCV中提供了鍵盤操作的函數waitKey,函數定義如下:

retval = waitKey(delay=None)

參數說明如下:
?delay,延遲等待的時間,單位為毫秒,設置為時則無限期等待直到鍵盤操作;
?retval,返回操作的按鍵(返回值)。
函數waitKey無限期地(當參數為0時)等待一個按鍵事件,或者等待延遲毫秒(當參數為正時)。由于操作系統在切換線程之間有一個最短的時間間隔,因此函數不會完全等待delay毫秒,它至少會等待delay毫秒,這取決于此時計算機上運行的其他內容。它返回被按下的按鍵的編碼,如果在指定的時間過去之前沒有按下任何鍵,則返回-1。
函數waitKey函數是highgui模塊中唯一可以獲取和處理事件的方法,因此需要定期調用它以進行正常地進行事件處理,除非在處理事件的環境中已經使用了highgui。僅當至少創建了一個highgui窗口且該窗口處于活動狀態時,該函數才起作用。如果有幾個highgui窗口,其中任何一個都可以處于活動狀態。
圖像顯示函數imshow后必須跟有waitKey函數,否則圖像無法正常顯示。
waitKey使用的案例代碼如下:

import cv2#讀取圖像 image = cv2.imread("src.jpg") #圖像顯示 cv2.imshow("image", image) #按鍵等待 key = cv2.waitKey(0) print("Press key is:", key) cv2.destroyWindow("image")

按下按鍵G,顯示窗口關閉,按鍵按下打印信息如下:

Press key is: 103

案例80:鼠標操作

OpenCV中設置鼠標回調的函數為setMouseCallback,函數定義如下:

setMouseCallback(windowName, onMouse, param=None)

參數說明如下:
?windowName,窗口名;
?onMouse,鼠標事件回調函數;
?param,參數。
setMouseCallback函數的返回值為None。
OpenCV中的鼠標事件可以通過如下的代碼查詢:

import cv2 events = [ev for ev in dir(cv2) if 'EVENT' in ev] 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']

見6.1節,鼠標事件類型由MouseEventTypes定義,鼠標事件標志由MouseEventFlags定義。
本節案例是通過不同的鼠標操作進行圖形繪制,鼠標左鍵雙擊可以繪制圓,鼠標左鍵按下拖動繪制紅色線,鼠標右鍵按下拖動繪制藍色線,案例代碼如下:

import cv2 import numpy as np#設置鼠標起始點 start_point, end_point= (0,0), (0,0) #設置鼠標左鍵和右鍵按下/抬起標志 lb_down, lb_up, rb_down, rb_up = False, False, False, False # 鼠標回調函數 def mouse_event(event, x, y, flags, param):global end_point, start_point, lb_down, lb_up, rb_down, rb_up# 左鍵雙擊if event == cv2.EVENT_LBUTTONDBLCLK:cv2.circle(img, (x, y), 100, (0, 255, 0), -1)# 左鍵按下elif event == cv2.EVENT_LBUTTONDOWN:# 設置鼠標按下的起始點end_point = (x, y)start_point = end_pointlb_down = True# 右鍵按下elif event == cv2.EVENT_RBUTTONDOWN:end_point = (x, y)start_point = end_pointrb_down = True# 鼠標移動,繪制線elif event == cv2.EVENT_MOUSEMOVE:# 鼠標左鍵按下繪制紅色線if lb_down:cv2.line(img, end_point, (x,y), (0, 0, 255), 2, -1)# 鼠標右鍵按下繪制藍色線if rb_down:cv2.line(img, end_point, (x, y), (255, 0, 0), 2, -1)end_point = (x, y)# 左鍵釋放elif event == cv2.EVENT_LBUTTONUP:lb_up = Truelb_down = Falsecv2.line(img, end_point, (x,y), (0, 0, 255), 2, -1)# 右鍵釋放elif event == cv2.EVENT_RBUTTONUP:rb_up = Truerb_down = Falsecv2.line(img, end_point, (x,y), (255, 0, 0), 2, -1)# 創建一個黑色的圖像,一個窗口,并綁定到窗口的功能 img = np.zeros((512, 512, 3), np.uint8) cv2.namedWindow('image') # 設置回調 cv2.setMouseCallback('image', mouse_event) while (1):cv2.imshow('image', img)# 按下Esc鍵退出if cv2.waitKey(10) == 27:break cv2.destroyAllWindows()

鼠標繪制結果如圖6.5所示。

圖6.5

總結

以上是生活随笔為你收集整理的【学习OpenCV4】键盘鼠标操作总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。