最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年10月09日 15:01:55   作者:拜陽  
最近的工作經(jīng)常需要對圖像進(jìn)行操作,也需要用鼠標(biāo)對圖像進(jìn)行各種操作,所以下面這篇文章主要給大家介紹了關(guān)于python opencv鼠標(biāo)交互操作的相關(guān)資料,需要的朋友可以參考下

前言

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

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

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

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

參數(shù)說明:

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

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

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

參數(shù)說明:

  • event:由回調(diào)函數(shù)根據(jù)鼠標(biāo)對圖像的操作自動獲得,內(nèi)容包含左鍵點擊,左鍵彈起,右鍵點擊...等等等非常多的操作。
  • x,y:由回調(diào)函數(shù)自動獲得,記錄了鼠標(biāo)當(dāng)前位置的坐標(biāo),坐標(biāo)以圖像左上角為原點(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似乎不能同時起作用,也就是說,我們無法通過同時判斷這兩個條件來實現(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']

示例

下面是一個簡單的示例,運行程序后,我們可以通過鼠標(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()

上面程序中有幾個注意點:

  • 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語言的指針傳遞。
  • 需要一個無限循環(huán)來刷新圖像。
  • 無限循環(huán)的退出條件由鍵盤獲取,cv2.waitKey()用來獲取鍵盤的按鍵,當(dāng)我們點ESC后就可以退出。

這里點了三次左鍵,終端輸出以下內(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • TensorFlow2.1.0最新版本安裝詳細(xì)教程

    TensorFlow2.1.0最新版本安裝詳細(xì)教程

    TensorFlow是一款優(yōu)秀的深度學(xué)習(xí)框架,支持多種常見的操作系統(tǒng),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,這篇文章主要介紹了TensorFlow2.1.0最新版本安裝詳細(xì)教程,需要的朋友可以參考下
    2020-04-04
  • python3 mmh3安裝及使用方法

    python3 mmh3安裝及使用方法

    這篇文章主要介紹了python3 mmh3安裝及使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析

    高考要來啦!用Python爬取歷年高考數(shù)據(jù)并分析

    轉(zhuǎn)眼間,高考的日子又要來臨了,不知道高考學(xué)子們準(zhǔn)備的怎么樣了,今天這篇文章簡單且隨意地分析一下高考的一些數(shù)據(jù),需要的朋友可以參考下
    2021-06-06
  • Python?PaddleNLP開源實現(xiàn)快遞單信息抽取

    Python?PaddleNLP開源實現(xiàn)快遞單信息抽取

    這篇文章主要為大家介紹了Python?PaddleNLP開源項目實現(xiàn)對快遞單信息抽取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python調(diào)用JavaScript代碼的方法

    Python調(diào)用JavaScript代碼的方法

    這篇文章主要介紹了Python調(diào)用JavaScript代碼的方法,幫助大家在不同場景里,采用的最佳調(diào)用方式,提高程序的性能,感興趣的朋友可以了解下
    2020-10-10
  • OpenCV學(xué)習(xí)之圖像加噪與濾波的實現(xiàn)詳解

    OpenCV學(xué)習(xí)之圖像加噪與濾波的實現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了OpenCV中圖像的加噪與濾波操作的相關(guān)資料,文中的示例代碼簡潔易懂,具有一定的借鑒價值,需要的可以參考一下
    2023-02-02
  • Python正則表達(dá)式使用范例分享

    Python正則表達(dá)式使用范例分享

    本文給大家總結(jié)了7個常用的Python正則表達(dá)式的使用范例以及簡單解釋分析,有需要的小伙伴可以參考下
    2016-12-12
  • Python高級技巧之利用psutil和subprocess實現(xiàn)程序監(jiān)控與管理

    Python高級技巧之利用psutil和subprocess實現(xiàn)程序監(jiān)控與管理

    本文介紹了如何使用Python的psutil和subprocess模塊監(jiān)控程序運行狀態(tài),并提供了一個案例腳本,用于監(jiān)控目標(biāo)程序并在停止時自動重啟,詳細(xì)介紹了subprocess模塊的基本用法和psutil模塊的系統(tǒng)信息獲取、進(jìn)程管理及資源監(jiān)控功能,需要的朋友可以參考下
    2024-09-09
  • 關(guān)于pandas的read_csv方法使用解讀

    關(guān)于pandas的read_csv方法使用解讀

    這篇文章主要介紹了關(guān)于pandas的read_csv方法使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • python的getattr和getattribute攔截內(nèi)置操作實現(xiàn)

    python的getattr和getattribute攔截內(nèi)置操作實現(xiàn)

    在Python中,getattr和getattribute是用于動態(tài)屬性訪問和自定義屬性訪問行為的重要工具,本文主要介紹了python的getattr和getattribute攔截內(nèi)置操作實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

家居| 潢川县| 乐山市| 资源县| 郑州市| 凌源市| 绥江县| 济源市| 海淀区| 怀化市| 米泉市| 林州市| 威信县| 故城县| 蓬溪县| 托克逊县| 碌曲县| 肥东县| 晋城| 无锡市| 辽阳县| 农安县| 岳普湖县| 鄂伦春自治旗| 白沙| 青河县| 毕节市| 竹溪县| 南召县| 阳泉市| 黄大仙区| 措勤县| 佛山市| 沈阳市| 万州区| 东莞市| 兴和县| 枣庄市| 新乐市| 临清市| 武乡县|