Python Opencv 通過軌跡(跟蹤)欄實現(xiàn)更改整張圖像的背景顏色
?。。”静┛?,是對圖像的背景顏色的修改的基礎(chǔ)講解~?。?!
還包括一個練習——是對背景色修改的一點應(yīng)用嘗試?。?!——始終相信學(xué)習多一點探索,腳步會更堅定一些~
愿所有正在努力的人都可以堅持自己的路一直走下去!
實現(xiàn)軌跡(跟蹤)欄功能的函數(shù)
函數(shù)主要參數(shù)講解
cv.createTrackbar()——創(chuàng)建一個軌跡(跟蹤)欄
cv.getTrackbarPos()——獲取一個軌跡(跟蹤)欄的值
cv.createTrackbar()參數(shù)如下:
- 參數(shù)一:trackbarname——軌跡(跟蹤)欄名稱
- 參數(shù)二:winname——需要掛載軌跡(跟蹤)欄的窗體名
- 參數(shù)三:value——默認值
- 參數(shù)四:count——上限值
- 參數(shù)五:onChange ——軌跡(跟蹤)欄的回調(diào)執(zhí)行函數(shù)
- (一般僅僅是通過軌跡欄修改值,然后讀取的話,這個參數(shù)可以不用管)參數(shù)六:userdata ——作為回調(diào)傳遞的用戶數(shù)據(jù)。它可以在不使用全局變量的情況下處理trackbar事件。
cv.getTrackbarPos()參數(shù)如下:
- 參數(shù)一:trackbarname——需要讀取的軌跡(跟蹤)欄名稱
- 參數(shù)二:winname——對應(yīng)的窗體名
代碼實現(xiàn)
我們先創(chuàng)建一個窗體,為軌跡(跟蹤)欄的掛載做準備
~照片就默認創(chuàng)建一張黑色圖片
import cv2 as cv
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('imag', cv.WINDOW_NORMAL)
cv.resizeWindow('imag', 510, 510)
接著我們把需要的軌跡(跟蹤)欄添加到這個窗體中(記得必須要創(chuàng)建軌跡(跟蹤)欄回調(diào)函數(shù)的?。。。?br /> 回調(diào)函數(shù)可以為pass空函數(shù)——但是必須要有?。?!
這次要實現(xiàn)背景色的控制,那么我們設(shè)置三個軌跡(跟蹤)欄,每一個軌跡欄對應(yīng)一個0~255的值——對應(yīng)BGR中的三色值?。?!
def nothing(x):
pass
# 參數(shù)依次為:設(shè)置軌跡(跟蹤)欄名字,掛載的窗體, 默認值, 最大值,回調(diào)函數(shù)
cv.createTrackbar('R', 'imag', 0, 255, nothing) # R的值——nothing傳入一個空函數(shù)體,不執(zhí)行任何回調(diào)函數(shù)
cv.createTrackbar('G', 'imag', 0, 255, nothing) # G的值
cv.createTrackbar('B', 'imag', 0, 255, nothing) # B的值
switch = '1:ON\n0:OFF'
cv.createTrackbar(switch, 'imag', 0, 1, nothing)
# 設(shè)置一個開關(guān)——當為1時,圖片背景可以改變——否則為黑色
顯示主體部分的代碼
while True:
cv.imshow('imag', img)
k = cv.waitKey(1) & 0xFF
if k == 27: # ESC退出
break
if cv.getTrackbarPos(switch, 'imag') == 1: # 當swtch軌跡(跟蹤)欄的值為1時,允許改變背景色
img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
# getTrackbarPos的參數(shù)為:讀取值的軌跡(跟蹤)欄名,所在的窗體名
# opencv的顏色為BGR——依次獲取軌跡(跟蹤)欄的值就可以了~
else: # 否則為默認黑色
img[:] = 0
cv.destroyAllWindows()
效果
完整代碼
import cv2 as cv
import numpy as np
def nothing(x):
pass
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('imag', cv.WINDOW_NORMAL)
cv.resizeWindow('imag', 510, 510)
cv.createTrackbar('R', 'imag', 0, 255, nothing)
cv.createTrackbar('G', 'imag', 0, 255, nothing)
cv.createTrackbar('B', 'imag', 0, 255, nothing)
switch = '1:ON\n0:OFF'
cv.createTrackbar(switch, 'imag', 0, 1, nothing)
while True:
cv.imshow('imag', img)
k = cv.waitKey(1) & 0xFF
if k == 27:
break
if cv.getTrackbarPos(switch, 'imag') == 1:
img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
else:
img[:] = 0
cv.destroyAllWindows()
效果
默認打開的樣子~

此時調(diào)節(jié)背景色是不改變的~

當打開時,背景色就會發(fā)生改變了~

小訓(xùn)
訓(xùn)練要求
我們通過鼠標繪制一些東西,然后將背景顏色的修改,作為圖片刷新(清空內(nèi)容)~
代碼結(jié)構(gòu)
鼠標回調(diào)函數(shù)(包含包的引用)
import cv2 as cv import numpy as np drawing = False line_size = 2 def mouse_function(event, x, y, flags, param): # 鼠標回調(diào)函數(shù)——執(zhí)行鼠標左鍵按下后移動繪圖 global drawing, line_size if event == cv.EVENT_LBUTTONDOWN: drawing = True elif event == cv.EVENT_MOUSEMOVE: if drawing is True: cv.circle(img, (x, y), line_size, (0, 125, 255), -1, cv.LINE_AA) elif event == cv.EVENT_LBUTTONUP: drawing = False cv.circle(img, (x, y), line_size, (0, 125, 255), -1, cv.LINE_AA)
軌跡(跟蹤)欄回調(diào)函數(shù)
# 這里不需要任何操作~所以用pass空函數(shù)體即可
def nothing(x):
pass
__main__主體代碼
if __name__ == "__main__":
img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('imag', cv.WINDOW_NORMAL)
cv.resizeWindow('imag', 510, 510)
cv.setMouseCallback('imag', mouse_function) # 實現(xiàn)鼠標回調(diào)函數(shù)
cv.createTrackbar('R', 'imag', 0, 255, nothing) # 設(shè)置R軌跡(跟蹤)欄
cv.createTrackbar('G', 'imag', 0, 255, nothing)
cv.createTrackbar('B', 'imag', 0, 255, nothing)
switch = '1:ON\n0:OFF'
cv.createTrackbar(switch, 'imag', 0, 1, nothing) # 設(shè)置開關(guān)控制軌跡(跟蹤)欄
while True:
cv.imshow('imag', img)
k = cv.waitKey(1) & 0xFF
if k == 27:
break
if cv.getTrackbarPos(switch, 'imag') == 1: # 為1是,刷新畫面
img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')]
cv.setTrackbarPos(switch, 'imag', 0) # 通過set軌跡(跟蹤)欄位置,實現(xiàn)為1刷新后,及時回到0位置
cv.destroyAllWindows()
效果:(小訓(xùn)練的代碼連起來就可以直接運行的,這里就不單獨再寫一遍了)
先隨意用鼠標寫“開心”兩個字~

接著點擊這里(可能需要點一次選中軌跡(跟蹤)欄,再點擊才能執(zhí)行變化)

然后就實現(xiàn)刷新了~

我們再寫點其它的——

到這里小練習也就結(jié)束了——既練習了鼠標事件當作畫筆,也實現(xiàn)了軌跡(跟蹤)欄的設(shè)置和讀取——當作畫板刷新的功能(●'◡'●)
總結(jié)
到此這篇關(guān)于Python Opencv 通過軌跡(跟蹤)欄實現(xiàn)更改整張圖像的背景顏色的文章就介紹到這了,更多相關(guān)Python Opencv更改圖像的背景顏色內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 實現(xiàn)圖片色彩轉(zhuǎn)換案例
我們在看動漫、影視作品中,當人物在回憶過程中,體現(xiàn)出來的畫面一般都是黑白或者褐色的。本文將提供將圖片色彩轉(zhuǎn)為黑白或者褐色風格的案例詳解,感興趣的小伙伴可以了解一下。2021-11-11
Python使用matplotlib給柱狀圖添加數(shù)據(jù)標簽bar_label()
這篇文章主要介紹了Python使用matplotlib給柱狀圖添加數(shù)據(jù)標簽bar_label(),記錄如何用使用matplotlib給柱狀圖添加數(shù)據(jù)標簽,是以matplotlib.pyplot.bar_label()為例,需要的朋友可以參考一下2022-03-03
Python使用Matplotlib繪制散點趨勢線的代碼詳解
Matplotlib是一個用于數(shù)據(jù)可視化的強大Python庫,其基本功能之一是創(chuàng)建帶有趨勢線的散點圖,散點圖對于可視化變量之間的關(guān)系非常有用,本文將指導(dǎo)您使用Matplotlib繪制散點趨勢線的過程,涵蓋線性和多項式趨勢線,需要的朋友可以參考下2025-01-01
python中with語句結(jié)合上下文管理器操作詳解
這篇文章主要給大家介紹了關(guān)于python中with語句結(jié)合上下文管理器操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用python具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧2019-12-12
Python 把序列轉(zhuǎn)換為元組的函數(shù)tuple方法
今天小編就為大家分享一篇Python 把序列轉(zhuǎn)換為元組的函數(shù)tuple方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
利用Django提供的ModelForm增刪改數(shù)據(jù)的方法
這篇文章主要介紹了利用Django提供的ModelForm增刪改數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01

