python 基于opencv 實現(xiàn)一個鼠標繪圖小程序
需求
在畫布上用鼠標畫圖,可以畫圓或矩形,按m鍵在兩種模式下切換。左鍵按下時開始畫圖,移動到哪兒畫到哪兒,左鍵釋放時結(jié)束畫圖。
實現(xiàn)思想
用鼠標畫圖:需要定義鼠標的回調(diào)函數(shù)mouse_event
畫圓或矩形:需要定義一個畫圖的模式mode
左鍵單擊、移動、釋放:需要捕獲三個不同的事件
開始畫圖,結(jié)束畫圖:需要定義一個畫圖的標記位drawing
實現(xiàn)代碼
import cv2 as cv
import numpy as np
drawing = False # 是否開始畫圖
mode = True # True:畫矩形,F(xiàn)alse:畫圓
start = (-1, -1)
# 鼠標的回調(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)
# 鼠標移動,畫圖
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
實驗結(jié)果

以上就是python 基于opencv 實現(xiàn)一個鼠標繪圖小程序的詳細內(nèi)容,更多關(guān)于python 鼠標繪圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息
這篇文章主要介紹了在Python中使用cookielib和rllib2配合PyQuery抓取網(wǎng)頁信息的教程,主要是利用PyQuery解析HTML來實現(xiàn),需要的朋友可以參考下2015-04-04
python中統(tǒng)計相同字符的個數(shù)方法實例
我們在開發(fā)中經(jīng)常需要統(tǒng)計某個字符或字符串出現(xiàn)的次數(shù),下面這篇文章主要給大家介紹了關(guān)于python中統(tǒng)計相同字符的個數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-01-01
使用python將微信image下.dat文件解密為.png的方法
這篇文章主要介紹了使用python將微信image下.dat文件解密為.png的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
Python利用itchat模塊定時給朋友發(fā)送微信信息
這篇文章主要介紹了在Python中利用itchat模塊編寫一個爬蟲腳本,可以實現(xiàn)每天定時給朋友發(fā)微信暖心話,感興趣的可以跟隨小編一起學習一下2022-01-01
python GUI庫圖形界面開發(fā)之PyQt5動態(tài)(可拖動控件大小)布局控件QSplitter詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5動態(tài)(可拖動控件大小)布局控件QSplitter詳細使用方法與實例,需要的朋友可以參考下2020-03-03
Python 過濾字符串的技巧,map與itertools.imap
Python中的map函數(shù)非常有用,在字符轉(zhuǎn)換和字符遍歷兩節(jié)都出現(xiàn)過,現(xiàn)在,它又出現(xiàn)了,會給我們帶來什么樣的驚喜呢?是不是要告訴我們,map是非常棒的,以后要多找它玩呢?2008-09-09

