OpenCV Python 形態學轉換 十七

2021-10-01 14:14:59 字數 3602 閱讀 1306

在這一章當中, 我們將學習不同的形態學操作,例如侵蝕,膨脹,開運算,閉運算等。 我們將看到不同的功能,例如:cv.erode(),cv.dilate(),cv.morphologyex()等。

形態變換是一些基於影象形狀的簡單操作。通常在二進位制影象上執行。它需要兩個輸入,乙個是我們的原始影象,第二個是決定操作性質的結構元素核心。兩種基本的形態學運算元是侵蝕和膨脹。然後,它的變體形式(如「開啟」,「關閉」,「漸變」等)也開始起作用。在下圖的幫助下,我們將一一看到它們:

1. 侵蝕

侵蝕的基本思想就像土壤侵蝕一樣,它侵蝕前景物體的邊界(盡量使前景保持白色)。它是做什麼的呢?核心滑動通過影象(在2d卷積中)。原始影象中的乙個畫素(無論是1還是0)只有當核心下的所有畫素都是1時才被認為是1,否則它就會被侵蝕(變成0)。

結果是,根據核心的大小,邊界附近的所有畫素都會被丟棄。因此,前景物體的厚度或大小減小,或只是影象中的白色區域減小。它有助於去除小的白色雜訊(正如我們在顏色空間章節中看到的),分離兩個連線的物件等。

在這裡,作為乙個例子,我將使用乙個5x5核心,它包含了所有的1。讓我們看看它是如何工作的:

import cv2 as cv

import numpy as np

img = cv.imread(

'j.png',0

)kernel = np.ones((5

,5),np.uint8)

erosion = cv.erode(img,kernel,iterations =

1)

結果:

2. 擴張

它與侵蝕正好相反。如果核心下的至少乙個畫素為「 1」,則畫素元素為「 1」。因此,它會增加影象中的白色區域或增加前景物件的大小。通常,在消除噪音的情況下,腐蝕後會膨脹。因為腐蝕會消除白雜訊,但也會縮小物體。因此,我們對其進行了擴充套件。由於噪音消失了,它們不會回來,但是我們的目標區域增加了。在連線物件的損壞部分時也很有用。

dilation = cv.dilate(img,kernel,iterations =

1)

結果:

3. 開運算

開放只是侵蝕然後擴張的另乙個名稱。如上文所述,它對於消除噪音很有用。在這裡,我們使用函式cv.morphologyex()

opening = cv.morphologyex(img, cv.morph_open, kernel)
結果:

4. 閉運算

閉運算與開運算相反,先擴張然後再侵蝕。在關閉前景物件內部的小孔或物件上的小黑點時很有用。

5. 形態學梯度

這是影象擴張和侵蝕之間的區別。

結果將看起來像物件的輪廓。

6. 頂帽

它是輸入影象和影象開運算之差。下面的示例針對9x9核心完成。

tophat = cv.morphologyex(img, cv.morph_tophat, kernel)
結果:

7. 黑帽

這是輸入影象和影象閉運算之差。

blackhat = cv.morphologyex(img, cv.morph_blackhat, kernel)
結果:

在numpy的幫助下,我們在前面的示例中手動建立了乙個結構元素。它是矩形。但是在某些情況下,您可能需要橢圓形/圓形的核心。因此,為此,opencv具有乙個函式cv.getstructuringelement()。您只需傳遞核心的形狀和大小,即可獲得所需的核心。

# 矩形核心

>>

> cv.getstructuringelement(cv.morph_rect,(5

,5))

array([[

1,1,

1,1,

1],[

1,1,

1,1,

1],[

1,1,

1,1,

1],[

1,1,

1,1,

1],[

1,1,

1,1,

1]], dtype=uint8)

# 橢圓核心

>>

> cv.getstructuringelement(cv.morph_ellipse,(5

,5))

array([[

0,0,

1,0,

0],[

1,1,

1,1,

1],[

1,1,

1,1,

1],[

1,1,

1,1,

1],[

0,0,

1,0,

0]], dtype=uint8)

# 十字核心

>>

> cv.getstructuringelement(cv.morph_cross,(5

,5))

array([[

0,0,

1,0,

0],[

0,0,

1,0,

0],[

1,1,

1,1,

1],[

0,0,

1,0,

0],[

0,0,

1,0,

0]], dtype=uint8)

morphological operations: at hipr2

opencv中文官方文件:

OpenCV Python形態學變換

原理形態變換是根據的形狀進行的簡單運算。一般被用在二值影象上。它需要兩個輸入,乙個是我們的原始,另乙個是被叫做結構元素或者是核,用來決定運算的型別。兩個基本的形態運算是腐蝕和dilation.其他的變形如開,合,梯度等也會有。我們來看看他們在下面這張圖上的表現。1.腐蝕 腐蝕的基本理念就和土壤腐蝕一...

OpenCV Python 形態學操作

常用的形態學操作 腐蝕 膨脹 開運算和閉運算 形態學操作就是改變物體的形狀,比如腐蝕就是 變瘦 膨脹就是 變胖 形態學操作一般作用於二值化圖,來連線相鄰的元素或分離成獨立的元素。腐蝕和膨脹是針對中的白色部分!白色的畫素為255,黑色的畫素值為0 這樣原圖中邊緣的地方就會變成0 黑色 達到了 的效果。...

opencv python 7 形態學變換

形態學變換指將數學形態學作為工具從影象提取特徵或用於預處理或後處理的形態學過濾 細化和修剪等,主要針對二值影象。腐蝕即用乙個核掃過整張影象 類似2d卷積 若核中所有畫素均為1則置該畫素為1,否則為0,其結果就是邊界附近的白色畫素被抹去。cv2.erode 實現了該功能。膨脹與腐蝕相反,核中只要由乙個...