Python Opencv 通過(guò)軌跡(跟蹤)欄實(shí)現(xiàn)更改整張圖像的背景顏色
?。?!本博客,是對(duì)圖像的背景顏色的修改的基礎(chǔ)講解~?。?!
還包括一個(gè)練習(xí)——是對(duì)背景色修改的一點(diǎn)應(yīng)用嘗試?。?!——始終相信學(xué)習(xí)多一點(diǎn)探索,腳步會(huì)更堅(jiān)定一些~
愿所有正在努力的人都可以堅(jiān)持自己的路一直走下去!
實(shí)現(xiàn)軌跡(跟蹤)欄功能的函數(shù)
函數(shù)主要參數(shù)講解
cv.createTrackbar()——?jiǎng)?chuàng)建一個(gè)軌跡(跟蹤)欄
cv.getTrackbarPos()——獲取一個(gè)軌跡(跟蹤)欄的值
cv.createTrackbar()參數(shù)如下:
- 參數(shù)一:trackbarname——軌跡(跟蹤)欄名稱(chēng)
- 參數(shù)二:winname——需要掛載軌跡(跟蹤)欄的窗體名
- 參數(shù)三:value——默認(rèn)值
- 參數(shù)四:count——上限值
- 參數(shù)五:onChange ——軌跡(跟蹤)欄的回調(diào)執(zhí)行函數(shù)
- (一般僅僅是通過(guò)軌跡欄修改值,然后讀取的話(huà),這個(gè)參數(shù)可以不用管)參數(shù)六:userdata ——作為回調(diào)傳遞的用戶(hù)數(shù)據(jù)。它可以在不使用全局變量的情況下處理trackbar事件。
cv.getTrackbarPos()參數(shù)如下:
- 參數(shù)一:trackbarname——需要讀取的軌跡(跟蹤)欄名稱(chēng)
- 參數(shù)二:winname——對(duì)應(yīng)的窗體名
代碼實(shí)現(xiàn)
我們先創(chuàng)建一個(gè)窗體,為軌跡(跟蹤)欄的掛載做準(zhǔn)備
~照片就默認(rèn)創(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)
接著我們把需要的軌跡(跟蹤)欄添加到這個(gè)窗體中(記得必須要?jiǎng)?chuàng)建軌跡(跟蹤)欄回調(diào)函數(shù)的?。。。?br /> 回調(diào)函數(shù)可以為pass空函數(shù)——但是必須要有?。?!
這次要實(shí)現(xiàn)背景色的控制,那么我們?cè)O(shè)置三個(gè)軌跡(跟蹤)欄,每一個(gè)軌跡欄對(duì)應(yīng)一個(gè)0~255的值——對(duì)應(yīng)BGR中的三色值?。。?/p>
def nothing(x): pass # 參數(shù)依次為:設(shè)置軌跡(跟蹤)欄名字,掛載的窗體, 默認(rèn)值, 最大值,回調(diào)函數(shù) cv.createTrackbar('R', 'imag', 0, 255, nothing) # R的值——nothing傳入一個(gè)空函數(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è)置一個(gè)開(kāi)關(guān)——當(dāng)為1時(shí),圖片背景可以改變——否則為黑色
顯示主體部分的代碼
while True: cv.imshow('imag', img) k = cv.waitKey(1) & 0xFF if k == 27: # ESC退出 break if cv.getTrackbarPos(switch, 'imag') == 1: # 當(dāng)swtch軌跡(跟蹤)欄的值為1時(shí),允許改變背景色 img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')] # getTrackbarPos的參數(shù)為:讀取值的軌跡(跟蹤)欄名,所在的窗體名 # opencv的顏色為BGR——依次獲取軌跡(跟蹤)欄的值就可以了~ else: # 否則為默認(rèn)黑色 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()
效果
默認(rèn)打開(kāi)的樣子~
此時(shí)調(diào)節(jié)背景色是不改變的~
當(dāng)打開(kāi)時(shí),背景色就會(huì)發(fā)生改變了~
小訓(xùn)
訓(xùn)練要求
我們通過(guò)鼠標(biāo)繪制一些東西,然后將背景顏色的修改,作為圖片刷新(清空內(nèi)容)~
代碼結(jié)構(gòu)
鼠標(biāo)回調(diào)函數(shù)(包含包的引用)
import cv2 as cv import numpy as np drawing = False line_size = 2 def mouse_function(event, x, y, flags, param): # 鼠標(biāo)回調(diào)函數(shù)——執(zhí)行鼠標(biāo)左鍵按下后移動(dòng)繪圖 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) # 實(shí)現(xiàn)鼠標(biāo)回調(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è)置開(kāi)關(guān)控制軌跡(跟蹤)欄 while True: cv.imshow('imag', img) k = cv.waitKey(1) & 0xFF if k == 27: break if cv.getTrackbarPos(switch, 'imag') == 1: # 為1是,刷新畫(huà)面 img[:] = [cv.getTrackbarPos('B', 'imag'), cv.getTrackbarPos('G', 'imag'), cv.getTrackbarPos('R', 'imag')] cv.setTrackbarPos(switch, 'imag', 0) # 通過(guò)set軌跡(跟蹤)欄位置,實(shí)現(xiàn)為1刷新后,及時(shí)回到0位置 cv.destroyAllWindows()
效果:(小訓(xùn)練的代碼連起來(lái)就可以直接運(yùn)行的,這里就不單獨(dú)再寫(xiě)一遍了)
先隨意用鼠標(biāo)寫(xiě)“開(kāi)心”兩個(gè)字~
接著點(diǎn)擊這里(可能需要點(diǎn)一次選中軌跡(跟蹤)欄,再點(diǎn)擊才能執(zhí)行變化)
然后就實(shí)現(xiàn)刷新了~
我們?cè)賹?xiě)點(diǎn)其它的——
到這里小練習(xí)也就結(jié)束了——既練習(xí)了鼠標(biāo)事件當(dāng)作畫(huà)筆,也實(shí)現(xiàn)了軌跡(跟蹤)欄的設(shè)置和讀取——當(dāng)作畫(huà)板刷新的功能(●'◡'●)
總結(jié)
到此這篇關(guān)于Python Opencv 通過(guò)軌跡(跟蹤)欄實(shí)現(xiàn)更改整張圖像的背景顏色的文章就介紹到這了,更多相關(guān)Python Opencv更改圖像的背景顏色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)多線(xiàn)程的方式及多條命令并發(fā)執(zhí)行
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多線(xiàn)程的方式及多條命令并發(fā)執(zhí)行,感興趣的小伙伴們可以參考一下2016-06-06pandas數(shù)值排序的實(shí)現(xiàn)實(shí)例
篩選和排序是Excel中使用頻率最多的功能,本文主要介紹了pandas數(shù)值排序的實(shí)現(xiàn)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),,感興趣的可以了解一下2021-07-07在Pycharm中項(xiàng)目解釋器與環(huán)境變量的設(shè)置方法
今天小編就為大家分享一篇在Pycharm中項(xiàng)目解釋器與環(huán)境變量的設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python count()函數(shù)實(shí)例詳解
count() 是Python的內(nèi)置函數(shù),可以「統(tǒng)計(jì)」字符串里指定「字符」或指定字符串出現(xiàn)的「次數(shù)」,這篇文章主要介紹了Python count()函數(shù)詳解,需要的朋友可以參考下2023-07-07詳解Django中views數(shù)據(jù)查詢(xún)使用locals()函數(shù)進(jìn)行優(yōu)化
這篇文章主要介紹了Django中views數(shù)據(jù)查詢(xún)使用locals()函數(shù)進(jìn)行優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python中Pickling和Unpickling的區(qū)別詳解
在本文中,我們將探討 Python 中 pickling 和 unpickling 之間的主要區(qū)別,我們將詳細(xì)討論 Python pickling 和 unpickling 的概念,包括它們的目的、語(yǔ)法、用法以及安全可靠的 pickling 和 unpickling 操作的注意事項(xiàng),需要的朋友可以參考下2023-09-09Python之標(biāo)點(diǎn)符號(hào)string.punctuation的使用
Python的string模塊提供了一個(gè)方便的屬性string.punctuation,其中包含所有ASCII標(biāo)點(diǎn)符號(hào)字符,這使得在處理和識(shí)別字符串中的標(biāo)點(diǎn)符號(hào)時(shí)非常有用,可以通過(guò)簡(jiǎn)單的in關(guān)鍵字來(lái)檢測(cè)字符是否為標(biāo)點(diǎn)2024-09-09