人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python opencv鼠標(biāo)交互操作的實(shí)用指南

發(fā)布日期:2021-12-27 04:30 | 文章來源:CSDN

opencv的鼠標(biāo)交互操作主要通過兩個(gè)函數(shù)實(shí)現(xiàn):

  • 第一個(gè)是cv2.setMouseCallback(windowName, onMouse [, param])
  • 第二個(gè)是setMouseCallback()的第二個(gè)參數(shù),稱為鼠標(biāo)回調(diào)函數(shù)onMouse(event, x, y, flags, param)

下面分別對二者進(jìn)行說明,并舉一個(gè)簡單的例子說明其用法。

cv2.setMouseCallback(windowName, onMouse [, param])

參數(shù)說明:

  • windowName:必需。類似于cv.imshow()函數(shù),opencv具體操作哪個(gè)窗口以窗口名作為識(shí)別標(biāo)識(shí),這有點(diǎn)類似窗口句柄的概念。
  • onMouse:必需。鼠標(biāo)回調(diào)函數(shù)。鼠標(biāo)回調(diào)函數(shù)的定義是onMouse(event, x, y, flags, param),我們想要做什么鼠標(biāo)操作,都是在這個(gè)函數(shù)內(nèi)實(shí)現(xiàn)。
  • param:可選。請注意到onMouse里面也有一個(gè)param參數(shù),它與是setMouseCallback里的param是同一個(gè),更直白一點(diǎn)說,這個(gè)param是onMouse和setMouseCallback之間的參數(shù)通信接口。

鼠標(biāo)回調(diào)函數(shù):onMouse(event, x, y, flags, param)

這個(gè)參數(shù)列表不要改變它,除了param外其他都是由回調(diào)函數(shù)自動(dòng)獲取值。

參數(shù)說明:

  • event:由回調(diào)函數(shù)根據(jù)鼠標(biāo)對圖像的操作自動(dòng)獲得,內(nèi)容包含左鍵點(diǎn)擊,左鍵彈起,右鍵點(diǎn)擊...等等等非常多的操作。
  • x,y:由回調(diào)函數(shù)自動(dòng)獲得,記錄了鼠標(biāo)當(dāng)前位置的坐標(biāo),坐標(biāo)以圖像左上角為原點(diǎn)(0, 0),x方向向右為正,y方向向下為正。
  • flags:記錄了一些專門的操作,下面有說明。
  • param:從setMouseCallback()里傳遞過來的參數(shù)。該參數(shù)在setMouseCallback()處是可選參數(shù),所以可以不設(shè)置。

event和flags的種類:

可以使用如下代碼獲得event的種類

# -*- coding: utf-8 -*-
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events)

結(jié)果分為兩部分,下面以EVENT_FLAG_開頭的是flags對應(yīng)的狀態(tài),其它的是event對應(yīng)的狀態(tài)。
flags和event似乎不能同時(shí)起作用,也就是說,我們無法通過同時(shí)判斷這兩個(gè)條件來實(shí)現(xiàn)組合鍵操作。

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

示例

下面是一個(gè)簡單的示例,運(yùn)行程序后,我們可以通過鼠標(biāo)左鍵單擊來畫一些十字線。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
WIN_NAME = 'pick_points'

def onmouse_pick_points(event, x, y, flags, param):
 if event == cv2.EVENT_LBUTTONDOWN:
  print('x = %d, y = %d' % (x, y))
  cv2.drawMarker(param, (x, y), (0, 255, 0))

if __name__ == '__main__':
 image = np.zeros((256, 256, 3), np.uint8)
 cv2.namedWindow(WIN_NAME, 0)
 cv2.setMouseCallback(WIN_NAME, onmouse_pick_points, image)
 while True:
  cv2.imshow(WIN_NAME, image)
  key = cv2.waitKey(30)
  if key == 27:  # ESC
break
 cv2.destroyAllWindows()

上面程序中有幾個(gè)注意點(diǎn):

  • setMouseCallback()中的param參數(shù)我們傳遞了image進(jìn)去,也就是說鼠標(biāo)回調(diào)函數(shù)onmouse_pick_points()中的param就是image,畫十字線的操作在鼠標(biāo)回調(diào)函數(shù)中,該參數(shù)在onmouse_pick_points中的變化可以保留到函數(shù)外,可以理解為C++的引用傳遞,或C語言的指針傳遞。
  • 需要一個(gè)無限循環(huán)來刷新圖像。
  • 無限循環(huán)的退出條件由鍵盤獲取,cv2.waitKey()用來獲取鍵盤的按鍵,當(dāng)我們點(diǎn)ESC后就可以退出。

這里點(diǎn)了三次左鍵,終端輸出以下內(nèi)容:

x = 60, y = 55
x = 206, y = 113
x = 114, y = 192

并得到這樣一張圖像:

總結(jié)

到此這篇關(guān)于python opencv鼠標(biāo)交互操作的文章就介紹到這了,更多相關(guān)python opencv鼠標(biāo)交互操作內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部