python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序
需求
在畫布上用鼠標(biāo)畫圖,可以畫圓或矩形,按m鍵在兩種模式下切換。左鍵按下時(shí)開始畫圖,移動到哪兒畫到哪兒,左鍵釋放時(shí)結(jié)束畫圖。
實(shí)現(xiàn)思想
用鼠標(biāo)畫圖:需要定義鼠標(biāo)的回調(diào)函數(shù)mouse_event
畫圓或矩形:需要定義一個(gè)畫圖的模式mode
左鍵單擊、移動、釋放:需要捕獲三個(gè)不同的事件
開始畫圖,結(jié)束畫圖:需要定義一個(gè)畫圖的標(biāo)記位drawing
實(shí)現(xiàn)代碼
import cv2 as cv import numpy as np drawing = False # 是否開始畫圖 mode = True # True:畫矩形,F(xiàn)alse:畫圓 start = (-1, -1) # 鼠標(biāo)的回調(diào)函數(shù)的參數(shù)格式是固定的,不要隨意更改。 def mouse_event(event, x, y, flags, param): global start, drawing, mode # 左鍵按下:開始畫圖 if event == cv.EVENT_LBUTTONDOWN: drawing = True start = (x, y) # 鼠標(biāo)移動,畫圖 elif event == cv.EVENT_MOUSEMOVE: if drawing: if mode: cv.rectangle(img, start, (x, y), (0, 255, 0), -1) else: cv.circle(img, (x, y), 5, (0, 0, 255), -1) # 左鍵釋放:結(jié)束畫圖 elif event == cv.EVENT_LBUTTONUP: drawing = False if mode: cv.rectangle(img, start, (x, y), (0, 255, 0), -1) else: cv.circle(img, (x, y), 5, (0, 0, 255), -1) img = np.zeros((512, 512, 3), np.uint8) cv.namedWindow('image') cv.setMouseCallback('image', mouse_event) while(True): cv.imshow('image', img) # 按下m切換模式 if cv.waitKey(1) == ord('m'): mode = not mode # 按ESC鍵退出程序 elif cv.waitKey(1) == 27: break
實(shí)驗(yàn)結(jié)果
以上就是python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序的詳細(xì)內(nèi)容,更多關(guān)于python 鼠標(biāo)繪圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息
這篇文章主要介紹了在Python中使用cookielib和rllib2配合PyQuery抓取網(wǎng)頁信息的教程,主要是利用PyQuery解析HTML來實(shí)現(xiàn),需要的朋友可以參考下2015-04-04Python模擬伯努利試驗(yàn)和二項(xiàng)分布代碼實(shí)例
這篇文章主要介紹了Python模擬伯努利試驗(yàn)和二項(xiàng)分布代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05python中統(tǒng)計(jì)相同字符的個(gè)數(shù)方法實(shí)例
我們在開發(fā)中經(jīng)常需要統(tǒng)計(jì)某個(gè)字符或字符串出現(xiàn)的次數(shù),下面這篇文章主要給大家介紹了關(guān)于python中統(tǒng)計(jì)相同字符的個(gè)數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01python遍歷目錄下所有文件的五種實(shí)現(xiàn)方法
本文主要介紹了python遍歷目錄下所有文件的五種實(shí)現(xiàn)方法,包含os.walk(),os.scandir(),os.listdir(),glob模塊和osqp模塊這幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07使用python將微信image下.dat文件解密為.png的方法
這篇文章主要介紹了使用python將微信image下.dat文件解密為.png的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Python利用itchat模塊定時(shí)給朋友發(fā)送微信信息
這篇文章主要介紹了在Python中利用itchat模塊編寫一個(gè)爬蟲腳本,可以實(shí)現(xiàn)每天定時(shí)給朋友發(fā)微信暖心話,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-01-01python GUI庫圖形界面開發(fā)之PyQt5動態(tài)(可拖動控件大小)布局控件QSplitter詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5動態(tài)(可拖動控件大小)布局控件QSplitter詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03Python 過濾字符串的技巧,map與itertools.imap
Python中的map函數(shù)非常有用,在字符轉(zhuǎn)換和字符遍歷兩節(jié)都出現(xiàn)過,現(xiàn)在,它又出現(xiàn)了,會給我們帶來什么樣的驚喜呢?是不是要告訴我們,map是非常棒的,以后要多找它玩呢?2008-09-09