溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中opencv圖像金字塔輪廓及模板匹配是怎樣的

發(fā)布時(shí)間:2021-11-12 13:37:32 來(lái)源:億速云 閱讀:234 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章給大家介紹python中opencv圖像金字塔輪廓及模板匹配是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

    1.圖像金字塔

    ①高斯金字塔

    向下采樣,數(shù)據(jù)會(huì)越來(lái)越少,減少的方式是:將偶數(shù)行和列刪除

    向上采樣,數(shù)據(jù)會(huì)越來(lái)越多,將圖像在每個(gè)方向上擴(kuò)大為原來(lái)的兩倍,新增的行和列用0來(lái)填充。使用先前同樣的內(nèi)核與放大后的圖像卷積,獲得近似值。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    上采樣之后,圖片會(huì)變大。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    下采樣后,圖片會(huì)變小。

    ②拉普拉斯金字塔

    對(duì)于原始圖像,先執(zhí)行下采樣,再執(zhí)行上采樣,并用原始圖像減去得到的采樣結(jié)果。

    以上的計(jì)算方式為1層,第二層的計(jì)算,把第一層得到的結(jié)果作為原始圖像進(jìn)行計(jì)算。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    2.圖像輪廓

    cv.findContours(img,mode,method)

    最常用的mode:

    RETR_TREE,檢測(cè)所有的輪廓,并重構(gòu)嵌套輪廓的整個(gè)層次

    最常用的method:

    CHAIN_APPROX_NONE:以Freeman鏈碼的方式輸出輪廓,所有其他方法輸出多邊形(頂點(diǎn)的序列)

    CHAIN_APPROX_SIMPLE:壓縮水平的、垂直的和斜的部分,也就是函數(shù)只保留他們的終點(diǎn)部分。

    ①尋找輪廓

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    函數(shù)返回的第一個(gè)參數(shù)contours就是我們所需要的輪廓信息。它是一個(gè)列表的形式。每一個(gè)元素都是數(shù)組形式。一個(gè)圖像中可能有多個(gè)輪廓,并且會(huì)有外輪廓以及內(nèi)輪廓,均可通過(guò)返回的contours調(diào)用。

    ②輪廓特征

    通過(guò)調(diào)用不同的函數(shù)可以求得輪廓的面積以及周長(zhǎng)等。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    ③輪廓繪制

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    第一個(gè)參數(shù)就是要畫上去的圖,第二個(gè)是輪廓信息,第三個(gè)是輪廓的索引,第四個(gè)是使用的顏色通道,第五個(gè)是線條的寬度。

    也可以畫出輪廓的邊界矩形或者外接圓:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    3.模板匹配

    模板匹配 模板在原圖像上,從原點(diǎn)開始滑動(dòng),計(jì)算模板與圖像被模板覆蓋的地方的差別程度,這個(gè)差別程度在opencv里有6種,然后將每次計(jì)算的結(jié)果放在一個(gè)矩陣?yán)?,作為結(jié)果輸出。假如原圖像是AB,模板是ab大小,則輸出結(jié)果是(A-a+1) * (B-b+1)

    TM_SQDIFF:平方差異,越小越相關(guān)

    TM_CCORR:相關(guān)性,越大越相關(guān)

    TM_CCOEFF:相關(guān)系數(shù),越大越相關(guān)

    TM_SQDIFF_NORMED:歸一化平方不同,越接近0越相關(guān)

    TM_CCORR_NORMED:歸一化相關(guān)性,越接近1越相關(guān)

    TM_CCOEFF_NORMED:歸一化相關(guān)系數(shù),越接近1越相關(guān)

    建議:盡量使用歸一化的方法

    ①模板匹配

    讀取圖片以及需要匹配的模板,并將其進(jìn)行灰度化處理:

    下面得到的h,w就是模板的長(zhǎng)和寬

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    通過(guò)matchTemplate的方法進(jìn)行匹配:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    ②匹配框線繪制

    對(duì)于匹配所得的返回值,通過(guò)minMaxLoc得到最小值和最大值,以及各自對(duì)應(yīng)的坐標(biāo)。根據(jù)選擇的方法不同,所需要的目標(biāo)值不同。比如TM_SQDIFF_NORMED:歸一化平方不同,就是越接近0越相關(guān),即越小越好。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    得到了最佳的值以及坐標(biāo),就可以畫出來(lái)矩形框。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    在rectangle方法中,參數(shù)依次是:要畫框的圖片,框的左上角坐標(biāo),框的右下角坐標(biāo),框的亮度,框的線條粗細(xì)。結(jié)果如下:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    ③多對(duì)象匹配

    模板匹配也可匹配多個(gè)對(duì)象,若圖片中有多個(gè)和模板匹配的內(nèi)容,cv.matchTemplate返回的內(nèi)容中會(huì)有多個(gè)分?jǐn)?shù)高的結(jié)果,設(shè)定閾值后,把分?jǐn)?shù)高的結(jié)果的坐標(biāo),按同樣的方式處理,把方框全部畫出來(lái)即可。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    4.直方圖統(tǒng)計(jì)

    ①直方圖繪制

    可直接通過(guò)plt.hist方法,將圖像矩陣扁平化之后,繪制不同的像素出現(xiàn)的頻率直方圖。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    ②直方圖統(tǒng)計(jì)

    cv2.calcHist(images,channels,mask,histSize,ranges)

    參數(shù)中:

    imges:傳入的圖像

    channels:顏色通道,如果是灰度圖就是[0],如果是彩色可以是[0],[1],[2]。分別對(duì)應(yīng)著BGR。

    mask:掩膜,如果需要對(duì)圖像進(jìn)行掩膜處理可以傳入此參數(shù)。

    histSize:就是bin的數(shù)目,可以直接填入[256]

    ranges:像素值范圍,常為:[0,256]

    注意:傳入?yún)?shù)時(shí),都需要用中括號(hào)括起來(lái)。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    calcHist返回值是對(duì)應(yīng)顏色的統(tǒng)計(jì)值。當(dāng)i是0的時(shí)候,就是B,1對(duì)應(yīng)G,2對(duì)應(yīng)R

    ③直方圖的mask操作

    創(chuàng)建mask,此處使用圖片的長(zhǎng)寬作為mask的長(zhǎng)寬,并把需要展示的地方置為1,其他地方置為0即可。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    通過(guò)bitwise_and,即“與”操作,即可實(shí)現(xiàn)掩膜操作。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    把Mask應(yīng)用到圖片中,并畫出直方圖:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    ④直方圖均衡化

    通過(guò)cv.equalizeHist方法,可以對(duì)直方圖進(jìn)行均衡化

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    直方圖前后對(duì)比如下:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    對(duì)應(yīng)的圖像發(fā)生的變化如下:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    以上的方式是對(duì)全局直接進(jìn)行均衡化??梢钥闯鰣D中雕像的臉變得模糊。通過(guò)自適應(yīng)直方圖均衡化可解決此問(wèn)題,自適應(yīng)均衡化是通過(guò)將圖片分成不同的小塊,對(duì)每一小塊進(jìn)行各自的均衡化。

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    5.傅里葉變換

    低通濾波是保留低頻,圖像會(huì)變得模糊。高通濾波是保留高頻,圖像的細(xì)節(jié)會(huì)增強(qiáng)。

    在opencv中主要是cv2.dft()和cv2.idft(),輸入圖像需要先轉(zhuǎn)換成np.float32的格式 得到的結(jié)果中,頻率為0的部分會(huì)在左上角,通常要轉(zhuǎn)換到中心位置,可以通過(guò)shift變換來(lái)實(shí)現(xiàn) cv2.dft()得到的結(jié)果是雙通道的(實(shí)部、虛部),通常還需要轉(zhuǎn)換成圖像格式才能展示(0,255)

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    上圖是將圖片轉(zhuǎn)換到頻域之后,轉(zhuǎn)換成灰度圖并且展示的形式。

    在低通濾波中,當(dāng)轉(zhuǎn)換到頻域并把低頻的放到中間后,只需要設(shè)置一個(gè)掩膜,即可把圖像高頻濾除掉。然后在通過(guò)逆轉(zhuǎn)換,還原圖像即可。具體代碼如下:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    在高通濾波器中,只需要把上面的代碼中的掩膜轉(zhuǎn)換一下,把0換成1,1換成0即可實(shí)現(xiàn)高通濾波。最終的圖片展示如下:

    python中opencv圖像金字塔輪廓及模板匹配是怎樣的

    可以看出,圖片只保留了高頻,也就是變化劇烈的部分,也就是圖像中的邊緣。

    關(guān)于python中opencv圖像金字塔輪廓及模板匹配是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI