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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习OpenCV4】键盘鼠标操作总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文分享內(nèi)容來(lái)自圖書(shū)《學(xué)習(xí)OpenCV 4:基于Python的算法實(shí)戰(zhàn)》,該書(shū)內(nèi)容如下:

1章 OpenCV快速入門(mén); 第2章 圖像讀寫(xiě)模塊imgcodecs; 第3章 核心庫(kù)模塊core; 第4章 圖像處理模塊imgproc(一); 第5章 圖像處理模塊imgproc(二); 第6章 可視化模塊highgui; 第7章 視頻處理模塊videoio; 第8章 視頻分析模塊video; 第9章 照片處理模塊photo; 第10章 2D特征模塊features2d; 第11章 相機(jī)標(biāo)定與三維重建模塊calib3d; 第12章 傳統(tǒng)目標(biāo)檢測(cè)模塊objdetect; 第13章 機(jī)器學(xué)習(xí)模塊ml; 第14章 深度神經(jīng)網(wǎng)絡(luò)模塊dnn

歡迎關(guān)注圖書(shū)**《深度學(xué)習(xí)計(jì)算機(jī)視覺(jué)實(shí)戰(zhàn)》與《學(xué)習(xí)OpenCV4:基于Python的算法實(shí)戰(zhàn)》**。

案例79:鍵盤(pán)操作

OpenCV中提供了鍵盤(pán)操作的函數(shù)waitKey,函數(shù)定義如下:

retval = waitKey(delay=None)

參數(shù)說(shuō)明如下:
?delay,延遲等待的時(shí)間,單位為毫秒,設(shè)置為時(shí)則無(wú)限期等待直到鍵盤(pán)操作;
?retval,返回操作的按鍵(返回值)。
函數(shù)waitKey無(wú)限期地(當(dāng)參數(shù)為0時(shí))等待一個(gè)按鍵事件,或者等待延遲毫秒(當(dāng)參數(shù)為正時(shí))。由于操作系統(tǒng)在切換線程之間有一個(gè)最短的時(shí)間間隔,因此函數(shù)不會(huì)完全等待delay毫秒,它至少會(huì)等待delay毫秒,這取決于此時(shí)計(jì)算機(jī)上運(yùn)行的其他內(nèi)容。它返回被按下的按鍵的編碼,如果在指定的時(shí)間過(guò)去之前沒(méi)有按下任何鍵,則返回-1。
函數(shù)waitKey函數(shù)是highgui模塊中唯一可以獲取和處理事件的方法,因此需要定期調(diào)用它以進(jìn)行正常地進(jìn)行事件處理,除非在處理事件的環(huán)境中已經(jīng)使用了highgui。僅當(dāng)至少創(chuàng)建了一個(gè)highgui窗口且該窗口處于活動(dòng)狀態(tài)時(shí),該函數(shù)才起作用。如果有幾個(gè)highgui窗口,其中任何一個(gè)都可以處于活動(dòng)狀態(tài)。
圖像顯示函數(shù)imshow后必須跟有waitKey函數(shù),否則圖像無(wú)法正常顯示。
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,顯示窗口關(guān)閉,按鍵按下打印信息如下:

Press key is: 103

案例80:鼠標(biāo)操作

OpenCV中設(shè)置鼠標(biāo)回調(diào)的函數(shù)為setMouseCallback,函數(shù)定義如下:

setMouseCallback(windowName, onMouse, param=None)

參數(shù)說(shuō)明如下:
?windowName,窗口名;
?onMouse,鼠標(biāo)事件回調(diào)函數(shù);
?param,參數(shù)。
setMouseCallback函數(shù)的返回值為None。
OpenCV中的鼠標(biāo)事件可以通過(guò)如下的代碼查詢:

import cv2 events = [ev for ev in dir(cv2) if 'EVENT' in ev] print( events ) # 將鼠標(biāo)事件顯示出來(lái)

鼠標(biāo)事件打印結(jié)果如下:

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

見(jiàn)6.1節(jié),鼠標(biāo)事件類(lèi)型由MouseEventTypes定義,鼠標(biāo)事件標(biāo)志由MouseEventFlags定義。
本節(jié)案例是通過(guò)不同的鼠標(biāo)操作進(jìn)行圖形繪制,鼠標(biāo)左鍵雙擊可以繪制圓,鼠標(biāo)左鍵按下拖動(dòng)繪制紅色線,鼠標(biāo)右鍵按下拖動(dòng)繪制藍(lán)色線,案例代碼如下:

import cv2 import numpy as np#設(shè)置鼠標(biāo)起始點(diǎn) start_point, end_point= (0,0), (0,0) #設(shè)置鼠標(biāo)左鍵和右鍵按下/抬起標(biāo)志 lb_down, lb_up, rb_down, rb_up = False, False, False, False # 鼠標(biāo)回調(diào)函數(shù) 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:# 設(shè)置鼠標(biāo)按下的起始點(diǎn)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# 鼠標(biāo)移動(dòng),繪制線elif event == cv2.EVENT_MOUSEMOVE:# 鼠標(biāo)左鍵按下繪制紅色線if lb_down:cv2.line(img, end_point, (x,y), (0, 0, 255), 2, -1)# 鼠標(biāo)右鍵按下繪制藍(lán)色線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)# 創(chuàng)建一個(gè)黑色的圖像,一個(gè)窗口,并綁定到窗口的功能 img = np.zeros((512, 512, 3), np.uint8) cv2.namedWindow('image') # 設(shè)置回調(diào) cv2.setMouseCallback('image', mouse_event) while (1):cv2.imshow('image', img)# 按下Esc鍵退出if cv2.waitKey(10) == 27:break cv2.destroyAllWindows()

鼠標(biāo)繪制結(jié)果如圖6.5所示。

圖6.5

總結(jié)

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

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