opencv —— morphology形态学操作函数讲解(python)
opencv —— morphology形態學操作函數講解
目錄
opencv —— morphology形態學操作函數講解
形態學濾波:morphologyEx 函數
開運算:先腐蝕后膨脹。
閉運算:先膨脹后腐蝕。
形態學梯度: 膨脹圖與腐蝕圖之差。
頂帽:頂帽運算(Top Hat)又常常被譯為”禮帽“運算,原圖像與開運算圖之差。
黑帽: 為”閉運算“的結果圖與原圖像之差。
參考博客1
參考博客2
數學形態學(Mathematical morphology) 是一門建立在格論和拓撲學基礎之上的圖像分析學科,是數學形態學圖像處理的基本理論。其基本的運算包括:二值腐蝕和膨脹、二值開閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態學梯度、Top-hat變換、顆粒分析、流域變換、灰值腐蝕和膨脹、灰值開閉運算、灰值形態學梯度等。
morphology形態學操作函數主要包含了五個操作:開運算、閉運算、形態學梯度、頂帽、黑帽。opencv 將這些操作集合到了一個函數中 morphologyEx。要實現不同操作,僅需改變其第三個成員變量形態學運算標識符。?
形態學濾波:morphologyEx 函數
void?morphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1, -1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue());- src,輸入圖像,即原圖像,填 Mat 類的對象即可。
- dst,目標圖像,需要和原圖片有一樣的尺寸和類型。
- op,形態學運算的類型。
MORPH_ERODE = 0, //腐蝕
MORPH_DILATE = 1, //膨脹
MORPH_OPEN = 2, //開操作
MORPH_CLOSE = 3, //閉操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //頂帽操作
MORPH_BLACKHAT = 6, //黑帽操作
- kernel,膨脹操作的核。當為 NULL 時,表示的是使用參考點位于中心,大小 3×3 的核。
- anchor,錨點的位置,默認位于中心。
- iterations 迭代使用 dilate() 的次數,默認值為 1。
- borderType,邊界拓展的方法。
- borderValue,當邊界為常數時的邊界值,有默認值,一般不用管。
開運算:先腐蝕后膨脹。
開運算可以用來消除小物體、在纖細點處分離物體、平滑較大物體的邊界的同時并不明顯改變其面積。
代碼示例:
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread("C:\\Users\\Lijian\\Desktop\\test.jpg",cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='Greys_r') kernel = np.ones((1, 5), np.uint8) img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, anchor=(2, 0), iterations=2) #dilatazione cv2.imshow('open',img) cv2.waitKey(0)截圖
閉運算:先膨脹后腐蝕。
閉運算能夠排除小型黑洞(黑色區域),可以將團塊的邊緣突出出來。
代碼演示:
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread("C:\\Users\\Lijian\\Desktop\\test.jpg",cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='Greys_r')kernel = np.ones((1, 5), np.uint8) img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, anchor=(2, 0), iterations=2) #dilatazione cv2.imshow('close',img) cv2.waitKey(0)截圖
形態學梯度: 膨脹圖與腐蝕圖之差。
對二值圖像進行這一操作可以將團塊(blob)的邊緣突出出來。我們可以用形態學梯度來保留物體的邊緣輪廓。
代碼演示:
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread("C:\\Users\\Lijian\\Desktop\\test.jpg",cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='Greys_r')kernel = np.ones((1, 5), np.uint8) img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, anchor=(2, 0), iterations=2) #dilatazione cv2.imshow('MORPH_GRADIENT',img) cv2.waitKey(0)截圖:
頂帽:頂帽運算(Top Hat)又常常被譯為”禮帽“運算,原圖像與開運算圖之差。
因為開運算帶來的結果是放大了裂縫或者局部低亮度的區域,因此,從原圖中減去開運算后的圖,得到的效果圖突出了比原圖輪廓周圍的區域更明亮的區域,所以頂帽運算往往用來分離比鄰近點亮一些的斑塊。當一幅圖像具有大幅的背景的時候,而微小物品比較有規律的情況下,可以使用頂帽運算進行背景提取。
代碼演示:
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread("C:\\Users\\Lijian\\Desktop\\test.jpg",cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='Greys_r')kernel = np.ones((1, 5), np.uint8) img = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, anchor=(2, 0), iterations=2) #dilatazione cv2.imshow('MORPH_TOPHAT',img) cv2.waitKey(0)截圖:
黑帽: 為”閉運算“的結果圖與原圖像之差。
黑帽運算后的效果圖突出了比原圖輪廓周圍的區域更暗的區域,黑帽運算用來分離比鄰近點暗一些的斑塊。
代碼演示:
?
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread("C:\\Users\\Lijian\\Desktop\\test.jpg",cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='Greys_r') kernel = np.ones((1, 5), np.uint8) img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel, anchor=(2, 0), iterations=2) #dilatazione cv2.imshow('MORPH_BLACKHAT',img) cv2.waitKey(0)截圖
?
總結
以上是生活随笔為你收集整理的opencv —— morphology形态学操作函数讲解(python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot 快速入门 vod
- 下一篇: python代码优化指南_扣丁学堂Pyt