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

以上就是python 基于opencv 實現(xiàn)一個鼠標(biāo)繪圖小程序的詳細(xì)內(nèi)容,更多關(guān)于python 鼠標(biāo)繪圖的資料請關(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ù)保存模型失敗的問題
這篇文章主要介紹了解決在keras中使用model.save()函數(shù)保存模型失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式
這篇文章主要介紹了Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python中的__new__與__init__魔術(shù)方法理解筆記
這篇文章主要介紹了Python中的__new__與__init__魔術(shù)方法理解筆記,需要的朋友可以參考下2014-11-11
Kears 使用:通過回調(diào)函數(shù)保存最佳準(zhǔn)確率下的模型操作
這篇文章主要介紹了Kears 使用:通過回調(diào)函數(shù)保存最佳準(zhǔn)確率下的模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python 中如何使用 setLevel() 設(shè)置日志級別
這篇文章主要介紹了在 Python 中使用setLevel() 設(shè)置日志級別,Python 提供了一個單獨的日志記錄模塊作為其標(biāo)準(zhǔn)庫的一部分,以簡化日志記錄,本文將討論日志記錄 setLevel 及其在 Python 中的工作方式,需要的朋友可以參考下2023-07-07
python利用socket實現(xiàn)客戶端和服務(wù)端之間進(jìn)行通信
這篇文章主要介紹了python實現(xiàn)客戶端和服務(wù)端之間進(jìn)行通信,文章通過python利用socket展開詳情介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05

