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

詳解OpenCV中簡(jiǎn)單的鼠標(biāo)事件處理

 更新時(shí)間:2022年01月12日 10:14:23   作者:代碼騎士  
談及鼠標(biāo)事件,就是在觸發(fā)鼠標(biāo)按鈕后程序所做出相應(yīng)的反應(yīng),但是不影響程序的整個(gè)線程。本文將主要介紹OpenCV中的簡(jiǎn)單鼠標(biāo)事件處理,感興趣的可以學(xué)習(xí)一下

談及鼠標(biāo)事件,就是在觸發(fā)鼠標(biāo)按鈕后程序所做出相應(yīng)的反應(yīng),但是不影響程序的整個(gè)線程。這有些像異步處理。鼠標(biāo)事件響應(yīng)不會(huì)一直等著我們?nèi)グ炊罄m(xù)程序不執(zhí)行,這樣會(huì)造成阻塞,而是在我們不按鼠標(biāo)的時(shí)候程序也會(huì)正常進(jìn)行,按的時(shí)候會(huì)調(diào)用鼠標(biāo)的事件響應(yīng),這個(gè)過(guò)程就像程序一邊正常運(yùn)行一邊等待鼠標(biāo)響應(yīng)。

為了將鼠標(biāo)響應(yīng)和操作畫面進(jìn)行綁定,我們要?jiǎng)?chuàng)建一個(gè)回調(diào)函數(shù):

cv2.setMouseCallback函數(shù)語(yǔ)法

cv2.setMouseCallback(img,onMouse)

cv2.setMouseCallback函數(shù)參數(shù)解釋:

img:要綁定畫面的名字

onMouse:響應(yīng)函數(shù),即當(dāng)鼠標(biāo)事件觸發(fā)時(shí)調(diào)用的函數(shù)。

示例代碼:

cv2.setMouseCallback('image',draw_circle)

舉個(gè)例子:

當(dāng)我們?cè)诋嬅鎯?nèi)單擊的時(shí)候,會(huì)回調(diào)draw_circle函數(shù),而這個(gè)被調(diào)用的函數(shù)成為響應(yīng)函數(shù),它的作用是畫一個(gè)圓。調(diào)用這個(gè)函數(shù)后,我們就實(shí)現(xiàn)了畫面與回調(diào)函數(shù)的綁定。

011-2-鼠標(biāo)事件

查看所有被支持的鼠標(biāo)事件:

import cv2 events = [i for i in dir(cv2) if 'EVENT' in i] print(events)

程序顯示的鼠標(biāo)事件:

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

 回調(diào)函數(shù)  

在OpenCV中沒有特定的寫好的回調(diào)函數(shù)供我們直接使用,這需要我們自己編寫,回調(diào)函數(shù)的模板如下:

def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img,(x,y),100,(255,0,0),-1)

函數(shù)分析:

代碼第一行:是我們?cè)O(shè)置的函數(shù)名draw_circle以及它的參數(shù),第一個(gè)參數(shù)event表示在什么事件下調(diào)用這個(gè)函數(shù),x ,y可以理解為圖像中鼠標(biāo)指針?biāo)诘南袼攸c(diǎn)的坐標(biāo)值,后面兩個(gè)參數(shù)暫時(shí)不用理解。

代碼第二行:是事件的判定,如果發(fā)出了該事件,那么執(zhí)行第三行的代碼。

下面我們來(lái)通過(guò)雙擊鼠標(biāo)左鍵畫一個(gè)圓:

import cv2
import numpy as np
#設(shè)置回調(diào)函數(shù)
def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img,(x,y),100,(255,0,0),-1)
#創(chuàng)建圖像與窗口并將窗口與回調(diào)函數(shù)進(jìn)行綁定
img = np.zeros((500,500,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(1)&0xFF == ord('q'):
        break
cv2.destroyAllWindows()

結(jié)果:

在通過(guò)拖動(dòng)鼠標(biāo)畫一個(gè)矩形:

import cv2
import numpy as np
#按下鼠標(biāo)時(shí)為True
drawing = False
#當(dāng)mode為true時(shí)繪制矩形,按下m后mode變成false,用來(lái)繪制曲線
mode = True
ix,iy=-1,-1
#設(shè)置回調(diào)函數(shù)
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode
    #當(dāng)單擊時(shí)返回起始位置坐標(biāo)
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy=x,y
    #當(dāng)移動(dòng)鼠標(biāo)時(shí)繪制圖形,event可以查看移動(dòng)效果,flag檢測(cè)是否發(fā)生單擊
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
        if drawing == True:
            if mode == True:
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                #繪制圓圈,圓點(diǎn)連成線,3代表筆的粗細(xì)
                cv2.circle(img,(x,y),3,(0,255,0),-1)
    #當(dāng)松開鼠標(biāo)時(shí)停止繪制
    elif event == cv2.EVENT_LBUTTONUP:
        drawing ==False
#創(chuàng)建圖像與窗口并將窗口與回調(diào)函數(shù)進(jìn)行綁定
img = np.zeros((500,500,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1)
    if k == ord('m'):
        mode=not mode
    elif k == ord('q'):
        break
    elif k == ord('r'):
        img = np.zeros((500,500,3),np.uint8)
        cv2.namedWindow('image')
        cv2.setMouseCallback('image',draw_circle)
cv2.destroyAllWindows()
 

結(jié)果:

到此這篇關(guān)于詳解OpenCV中簡(jiǎn)單的鼠標(biāo)事件處理的文章就介紹到這了,更多相關(guān)OpenCV鼠標(biāo)事件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3 實(shí)現(xiàn)口罩抽簽的功能

    python3 實(shí)現(xiàn)口罩抽簽的功能

    這篇文章主要介紹了python3 實(shí)現(xiàn) 口罩抽簽的功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python屬于解釋語(yǔ)言嗎

    python屬于解釋語(yǔ)言嗎

    在本篇文章里小編給大家分享了關(guān)于python關(guān)于是否為解釋語(yǔ)言的知識(shí)點(diǎn),有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Django中的ajax請(qǐng)求

    Django中的ajax請(qǐng)求

    今天小編就為大家分享一篇關(guān)于Django中的ajax請(qǐng)求,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Python性能提升之延遲初始化

    Python性能提升之延遲初始化

    本文給大家分享的是在Python中使用延遲計(jì)算來(lái)提升性能的方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-12-12
  • python中精確的浮點(diǎn)數(shù)運(yùn)算示例

    python中精確的浮點(diǎn)數(shù)運(yùn)算示例

    這篇文章主要為大家介紹了python中精確的浮點(diǎn)數(shù)運(yùn)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 利用python在大量數(shù)據(jù)文件下刪除某一行的例子

    利用python在大量數(shù)據(jù)文件下刪除某一行的例子

    今天小編就為大家分享一篇利用python在大量數(shù)據(jù)文件下刪除某一行的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python學(xué)習(xí)之列表常用方法總結(jié)

    Python學(xué)習(xí)之列表常用方法總結(jié)

    這篇文章主要為大家介紹了Python中列表的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python列表有一定幫助,需要的可以參考一下
    2022-03-03
  • Python Socket使用實(shí)例

    Python Socket使用實(shí)例

    這篇文章主要介紹了Python Socket使用實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • python中l(wèi)ist方法詳解

    python中l(wèi)ist方法詳解

    list 是 Python 中的一種內(nèi)置數(shù)據(jù)類型,代表一個(gè)可變的有序序列。list 類型的對(duì)象可以使用多個(gè)方法來(lái)操作和修改其中的元素。文中通過(guò)代碼示例詳細(xì)介紹了list的常用方法,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • python中繞過(guò)反爬蟲的方法總結(jié)

    python中繞過(guò)反爬蟲的方法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python中繞過(guò)反爬蟲的方法總結(jié)內(nèi)容,需要的朋友們可以參考下。
    2020-11-11

最新評(píng)論

侯马市| 海伦市| 灵璧县| 沁源县| 天柱县| 新绛县| 小金县| 五常市| 奎屯市| 天门市| 安丘市| 页游| 阳东县| 罗平县| 霍州市| 德兴市| 河池市| 鄂温| 泉州市| 东城区| 盘山县| 黑龙江省| 贡山| 静乐县| 静海县| 剑川县| 老河口市| 华阴市| 南木林县| 绥芬河市| 长治市| 广东省| 宝山区| 乐业县| 肇州县| 长宁县| 图片| 儋州市| 潼关县| 泰顺县| 承德市|