訂閱
糾錯(cuò)
加入自媒體

圖像處理入門:實(shí)現(xiàn)一個(gè)簡單的濾波器

簡介人臉識別和目標(biāo)檢測這樣的術(shù)語聽起來覺得很酷,但是當(dāng)涉及到從頭開始實(shí)現(xiàn)它們時(shí),每個(gè)初學(xué)者都會覺得困難,這些技術(shù)實(shí)際上并沒有那么難實(shí)現(xiàn),一旦你掌握了其基本原理,那么實(shí)現(xiàn)它們就相當(dāng)簡單了。圖像處理有很多種應(yīng)用,包括用于解析文檔和生成相應(yīng)文本的光學(xué)字符識別(OCR)、圖像增強(qiáng)與重建、物體識別、人體運(yùn)動識別、手勢識別、人臉識別等。在學(xué)習(xí)的過程中,你會遇到過奇形怪狀的各種圖像濾波器,那有沒有去思考如何實(shí)現(xiàn)它嗎,在本文中,我們將通過實(shí)現(xiàn)一個(gè)簡單的濾波器來開始我們的圖像處理之旅!什么是OpenCVOpenCV是一個(gè)開源庫,包含了許多計(jì)算機(jī)視覺算法。它在計(jì)算機(jī)視覺和圖像處理中起著重要作用,用于實(shí)時(shí)操作,其效率足以滿足工業(yè)上的要求。OpenCV可以與其他庫一起使用,比如Numpy,這使得Python能夠處理OpenCV數(shù)組結(jié)構(gòu)。實(shí)現(xiàn)我們的第一個(gè)濾波器檢測邏輯計(jì)算機(jī)不能像人類一樣識別物體,為了能讓計(jì)算機(jī)達(dá)到這個(gè)目的,我們可以使用各種技術(shù)來讓計(jì)算機(jī)理解圖像,我們會將顏色作為檢測物體的主要依據(jù)。我們使用HSV顏色空間作為檢測特征。什么是HSVHSV是Hue, Saturation 和Value(色調(diào)、飽和度和值)。色調(diào):根據(jù)光譜,物體的顏色可分為紅、藍(lán)、綠、黃四種顏色。飽和度:它定義了顏色的強(qiáng)度。值:定義顏色的亮度。OpenCV中有150多種顏色空間轉(zhuǎn)換方法,其中一種是彩色圖像到HSV圖像的轉(zhuǎn)換。我們來看看代碼我們需要導(dǎo)入我們要使用的庫-OpenCV(cv2)和Numpy。import cv2

import numpy as np

Numpy是一個(gè)python庫,用于處理數(shù)組,它比傳統(tǒng)的python列表快50倍,這對我們來說非常重要,因?yàn)槲覀円幚砗芏鄨D像。Numpy給了我們在線性代數(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è)窗口來控制HSV,因?yàn)槲覀儾恢酪獧z測的對象的HSV,因此我們用它來調(diào)整HSV的上下限。因?yàn)楫?dāng)我們使用創(chuàng)建trackbar的方法時(shí),我們需要傳遞一個(gè)必要的回調(diào)函數(shù),在我們的例子中,這個(gè)回調(diào)函數(shù)什么也不做(但是它的使用會根據(jù)父函數(shù)的需要而改變);然后我們使用了一個(gè)方法cv2.videocapture(0),它是一個(gè)內(nèi)置函數(shù),用來從默認(rèn)攝像機(jī)捕捉視頻(0表示選擇默認(rèn)攝像機(jī));最后,我們刪除了所有的窗口,并在一個(gè)點(diǎn)擊事件(這里我們設(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è)置檢測條件后,我們需要將原始數(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è),我們會得到上面設(shè)置的所有軌跡條值。接下來我們主要做兩件事:1.創(chuàng)建掩碼掩碼是一種二進(jìn)制圖像,它指示要在其中執(zhí)行操作的像素。2.我們將使用位和邏輯來屏蔽原始圖像。我們使用名為“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é)果只檢測到粉紅色的物體,這是因?yàn)槲覀冎幌脒x擇粉紅色的物體!實(shí)際上,我們已經(jīng)使用軌跡條為特定的粉紅色設(shè)置了HSV值,這就是輸出只有特定粉紅色的原因。您可以選擇要檢測的任何特定顏色值。

結(jié)論本文我們實(shí)現(xiàn)了一個(gè)濾波器,可以檢測我們指定特定顏色的物體。我們所做的只是圖像處理和目標(biāo)檢測的一個(gè)非常基本的介紹性任務(wù)。近年來,計(jì)算機(jī)視覺領(lǐng)域有了很大的發(fā)展,其中大部分都包含了機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)。在許多項(xiàng)目中,對象檢測是首先執(zhí)行的基本任務(wù),因?yàn)樗鼮槲覀兲峁┝擞嘘P(guān)環(huán)境的信息,我們可以根據(jù)使用情況進(jìn)行過濾。

參考引用Implementing colour and shape-based object detection and tracking with OpenCV.

聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

    掃碼關(guān)注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號