圖像處理入門:實(shí)現(xiàn)一個(gè)簡(jiǎn)單的濾波器
簡(jiǎn)介人臉識(shí)別和目標(biāo)檢測(cè)這樣的術(shù)語(yǔ)聽(tīng)起來(lái)覺(jué)得很酷,但是當(dāng)涉及到從頭開(kāi)始實(shí)現(xiàn)它們時(shí),每個(gè)初學(xué)者都會(huì)覺(jué)得困難,這些技術(shù)實(shí)際上并沒(méi)有那么難實(shí)現(xiàn),一旦你掌握了其基本原理,那么實(shí)現(xiàn)它們就相當(dāng)簡(jiǎn)單了。圖像處理有很多種應(yīng)用,包括用于解析文檔和生成相應(yīng)文本的光學(xué)字符識(shí)別(OCR)、圖像增強(qiáng)與重建、物體識(shí)別、人體運(yùn)動(dòng)識(shí)別、手勢(shì)識(shí)別、人臉識(shí)別等。在學(xué)習(xí)的過(guò)程中,你會(huì)遇到過(guò)奇形怪狀的各種圖像濾波器,那有沒(méi)有去思考如何實(shí)現(xiàn)它嗎,在本文中,我們將通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的濾波器來(lái)開(kāi)始我們的圖像處理之旅!什么是OpenCVOpenCV是一個(gè)開(kāi)源庫(kù),包含了許多計(jì)算機(jī)視覺(jué)算法。它在計(jì)算機(jī)視覺(jué)和圖像處理中起著重要作用,用于實(shí)時(shí)操作,其效率足以滿足工業(yè)上的要求。OpenCV可以與其他庫(kù)一起使用,比如Numpy,這使得Python能夠處理OpenCV數(shù)組結(jié)構(gòu)。實(shí)現(xiàn)我們的第一個(gè)濾波器檢測(cè)邏輯計(jì)算機(jī)不能像人類一樣識(shí)別物體,為了能讓計(jì)算機(jī)達(dá)到這個(gè)目的,我們可以使用各種技術(shù)來(lái)讓計(jì)算機(jī)理解圖像,我們會(huì)將顏色作為檢測(cè)物體的主要依據(jù)。我們使用HSV顏色空間作為檢測(cè)特征。什么是HSVHSV是Hue, Saturation 和Value(色調(diào)、飽和度和值)。色調(diào):根據(jù)光譜,物體的顏色可分為紅、藍(lán)、綠、黃四種顏色。飽和度:它定義了顏色的強(qiáng)度。值:定義顏色的亮度。OpenCV中有150多種顏色空間轉(zhuǎn)換方法,其中一種是彩色圖像到HSV圖像的轉(zhuǎn)換。我們來(lái)看看代碼我們需要導(dǎo)入我們要使用的庫(kù)-OpenCV(cv2)和Numpy。import cv2
import numpy as np
Numpy是一個(gè)python庫(kù),用于處理數(shù)組,它比傳統(tǒng)的python列表快50倍,這對(duì)我們來(lái)說(shuō)非常重要,因?yàn)槲覀円幚砗芏鄨D像。Numpy給了我們?cè)诰性代數(shù)、傅立葉變換、矩陣等領(lǐng)域工作的函數(shù)。import cv2
import numpy as np
def nothing():
pass
cap=cv2.VideoCapture(0)
while(1):
_, img = cap.read()
k=cv2.waitkey(1)&0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
我們創(chuàng)建了一個(gè)回調(diào)函數(shù),它什么也不做,讓我們看看為什么。我們使用一個(gè)窗口來(lái)控制HSV,因?yàn)槲覀儾恢酪獧z測(cè)的對(duì)象的HSV,因此我們用它來(lái)調(diào)整HSV的上下限。因?yàn)楫?dāng)我們使用創(chuàng)建trackbar的方法時(shí),我們需要傳遞一個(gè)必要的回調(diào)函數(shù),在我們的例子中,這個(gè)回調(diào)函數(shù)什么也不做(但是它的使用會(huì)根據(jù)父函數(shù)的需要而改變);然后我們使用了一個(gè)方法cv2.videocapture(0),它是一個(gè)內(nèi)置函數(shù),用來(lái)從默認(rèn)攝像機(jī)捕捉視頻(0表示選擇默認(rèn)攝像機(jī));最后,我們刪除了所有的窗口,并在一個(gè)點(diǎn)擊事件(這里我們?cè)O(shè)置為ESC鍵)后釋放捕獲。我們可以用下面的函數(shù)命名一個(gè)窗口。cv2.namedWindow(<window name>)
讓我們繼續(xù)敲代碼…import cv2
import numpy as np
def nothing(x):
pass
cap=cv2.VideoCapture(0)
cv2.namedWindow('tracking')
cv2.createTrackbar('LH','tracking',0,255,nothing)
cv2.createTrackbar('LS','tracking',0,255,nothing)
cv2.createTrackbar('LV','tracking',0,255,nothing)
cv2.createTrackbar('UH','tracking',255,255,nothing)
cv2.createTrackbar('US','tracking',255,255,nothing)
cv2.createTrackbar('UV','tracking',255,255,nothing)
因此,在設(shè)置檢測(cè)條件后,我們需要將原始數(shù)據(jù)(即彩色圖像)轉(zhuǎn)換為HSV圖像。為了將基本彩色圖像轉(zhuǎn)換為HSV圖像,我們使用<variableName> = cv2.cvtColor(<frameName>,cv2.COLOR_BGR2HSV)
然后利用Numpy數(shù)組方法設(shè)置trackbar中數(shù)據(jù)的上下界。<variableName> = np.a(chǎn)rray(<array_Of_Parameters>)
使用這個(gè),我們會(huì)得到上面設(shè)置的所有軌跡條值。接下來(lái)我們主要做兩件事:1.創(chuàng)建掩碼掩碼是一種二進(jìn)制圖像,它指示要在其中執(zhí)行操作的像素。2.我們將使用位和邏輯來(lái)屏蔽原始圖像。我們使用名為“bitwise_and”的cv2方法,它執(zhí)行邏輯與運(yùn)算。<maskName> = cv2.inRange(hav, l_b, u_b)
res = cv2.bitwise_and(<frameName>, <frameName>, mask = <maskName>)
import cv2
import numpy as np
def nothing(x):
pass
cap=cv2.VideoCapture(0)
cv2.namedWindow('tracking')
cv2.createTrackbar('LH','tracking',0,255,nothing)
cv2.createTrackbar('LS','tracking',0,255,nothing)
cv2.createTrackbar('LV','tracking',0,255,nothing)
cv2.createTrackbar('UH','tracking',255,255,nothing)
cv2.createTrackbar('US','tracking',255,255,nothing)
cv2.createTrackbar('UV','tracking',255,255,nothing)
while (1):
_, img=cap.read()
hav=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
l_h(yuǎn)=cv2.getTrackbarPos('LH','tracking')
l_s=cv2.getTrackbarPos('LS', 'tracking')
l_v=cv2.getTrackbarPos('LV', 'tracking')
u_h(yuǎn)=cv2.getTrackbarPos('UH', 'tracking')
u_s=cv2.getTrackbarPos('US', 'tracking')
u_v=cv2.getTrackbarPos('UV', 'tracking')
l_b=np.a(chǎn)rray([l_h(yuǎn),l_s,l_v])
u_b=np.a(chǎn)rray([u_h(yuǎn),u_s,u_v])
mask=cv2.inRange(hav, l_b, u_b)
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('image', img)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k=cv2.waitKey(1)&0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
這些幀使用名為“imshow”的方法顯示。cv2.imshow(<name_of_Window>, <windowVariable>)
結(jié)果
結(jié)果只檢測(cè)到粉紅色的物體,這是因?yàn)槲覀冎幌脒x擇粉紅色的物體!實(shí)際上,我們已經(jīng)使用軌跡條為特定的粉紅色設(shè)置了HSV值,這就是輸出只有特定粉紅色的原因。您可以選擇要檢測(cè)的任何特定顏色值。
結(jié)論本文我們實(shí)現(xiàn)了一個(gè)濾波器,可以檢測(cè)我們指定特定顏色的物體。我們所做的只是圖像處理和目標(biāo)檢測(cè)的一個(gè)非;镜慕榻B性任務(wù)。近年來(lái),計(jì)算機(jī)視覺(jué)領(lǐng)域有了很大的發(fā)展,其中大部分都包含了機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)。在許多項(xiàng)目中,對(duì)象檢測(cè)是首先執(zhí)行的基本任務(wù),因?yàn)樗鼮槲覀兲峁┝擞嘘P(guān)環(huán)境的信息,我們可以根據(jù)使用情況進(jìn)行過(guò)濾。
參考引用Implementing colour and shape-based object detection and tracking with OpenCV.

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.1立即下載>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠和微軟,剖析WPS靈犀的AI實(shí)用主義
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 8 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 9 蘋果把身家押在Siri上:一場(chǎng)輸不起的自我革命
- 10 騰訊米哈游押寶的中國(guó)AI應(yīng)用,正在海外悶聲發(fā)財(cái)