python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序
需求
在畫(huà)布上用鼠標(biāo)畫(huà)圖,可以畫(huà)圓或矩形,按m鍵在兩種模式下切換。左鍵按下時(shí)開(kāi)始畫(huà)圖,移動(dòng)到哪兒畫(huà)到哪兒,左鍵釋放時(shí)結(jié)束畫(huà)圖。
實(shí)現(xiàn)思想
用鼠標(biāo)畫(huà)圖:需要定義鼠標(biāo)的回調(diào)函數(shù)mouse_event
畫(huà)圓或矩形:需要定義一個(gè)畫(huà)圖的模式mode
左鍵單擊、移動(dòng)、釋放:需要捕獲三個(gè)不同的事件
開(kāi)始畫(huà)圖,結(jié)束畫(huà)圖:需要定義一個(gè)畫(huà)圖的標(biāo)記位drawing
實(shí)現(xiàn)代碼
import cv2 as cv
import numpy as np
drawing = False # 是否開(kāi)始畫(huà)圖
mode = True # True:畫(huà)矩形,F(xiàn)alse:畫(huà)圓
start = (-1, -1)
# 鼠標(biāo)的回調(diào)函數(shù)的參數(shù)格式是固定的,不要隨意更改。
def mouse_event(event, x, y, flags, param):
global start, drawing, mode
# 左鍵按下:開(kāi)始畫(huà)圖
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
start = (x, y)
# 鼠標(biāo)移動(dòng),畫(huà)圖
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é)束畫(huà)圖
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)繪圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用arp欺騙偽造網(wǎng)關(guān)的方法
這篇文章主要介紹了python使用arp欺騙偽造網(wǎng)關(guān)的方法,涉及Python偽造網(wǎng)關(guān)的相關(guān)技巧,需要的朋友可以參考下2015-04-04
解決在keras中使用model.save()函數(shù)保存模型失敗的問(wèn)題
這篇文章主要介紹了解決在keras中使用model.save()函數(shù)保存模型失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式
這篇文章主要介紹了Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python中的__new__與__init__魔術(shù)方法理解筆記
這篇文章主要介紹了Python中的__new__與__init__魔術(shù)方法理解筆記,需要的朋友可以參考下2014-11-11
Kears 使用:通過(guò)回調(diào)函數(shù)保存最佳準(zhǔn)確率下的模型操作
這篇文章主要介紹了Kears 使用:通過(guò)回調(diào)函數(shù)保存最佳準(zhǔn)確率下的模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python 中如何使用 setLevel() 設(shè)置日志級(jí)別
這篇文章主要介紹了在 Python 中使用setLevel() 設(shè)置日志級(jí)別,Python 提供了一個(gè)單獨(dú)的日志記錄模塊作為其標(biāo)準(zhǔn)庫(kù)的一部分,以簡(jiǎn)化日志記錄,本文將討論日志記錄 setLevel 及其在 Python 中的工作方式,需要的朋友可以參考下2023-07-07
python3 簡(jiǎn)單實(shí)現(xiàn)組合設(shè)計(jì)模式
這篇文章主要介紹了python3 簡(jiǎn)單實(shí)現(xiàn)組合設(shè)計(jì)模式的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
python利用socket實(shí)現(xiàn)客戶端和服務(wù)端之間進(jìn)行通信
這篇文章主要介紹了python實(shí)現(xiàn)客戶端和服務(wù)端之間進(jìn)行通信,文章通過(guò)python利用socket展開(kāi)詳情介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05

