圖像膨脹和腐蝕
圖解
原理及python實現
更多內容:圖像膨脹和腐蝕原理及python實現
opencv中膨脹和腐蝕函數
dilation = cv.dilate(img, kernel) # 膨脹
erosion = cv.erode(img, kernel) # 腐蝕
實驗
import cv2 as cv
import numpy as np
img = cv.imread('j.png')
img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret,th = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# 參數1:源圖;參數2:核大小;參數3:腐蝕次數
erode1 = cv.erode(th,(3,3),10) # 腐蝕
dilate1 = cv.dilate(th,(3,3),10) # 擴張
result = np.hstack((th,erode1,dilate1))
cv.imshow('result',result)
cv.waitKey(0)
cv.destroyAllWindows()
輸出結果類似於上圖
cv.erode() 函數參數2:kernel講解
這個核也叫結構元素,因為形態學操作其實也是應用卷積來實現的。結構元素可以是矩形/橢圓/十字形,可以用cv.getStructuringElement()來生成不同形狀的結構元素,比如:
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5)) # 矩形結構
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5)) # 橢圓結構
kernel = cv.getStructuringElement(cv.MORPH_CROSS, (5, 5)) # 十字形結構
圖像開閉運算
原理
開運算:先腐蝕,再膨脹。有效消除物體外的白色噪聲。
閉運算:先膨脹,后腐蝕。有效消除物體內的黑色噪聲。
python實現
更多內容:圖像開閉運算原理及python實現
matlab實現
更多內容:圖像開閉運算原理及matlab實現
實驗
import cv2 as cv
import numpy as np
img = cv.imread('paojie_g.jpg',0)
ret,th = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5)) # 定義結構元素
opening = cv.morphologyEx(th, cv.MORPH_OPEN, kernel) # 開運算
closing = cv.morphologyEx(th, cv.MORPH_CLOSE, kernel) # 閉運算
result = np.hstack((th,opening,closing))
cv.imshow('result',result)
cv.waitKey(0)
cv.destroyAllWindows()
實驗結果
形態學梯度
定義
形態學梯度:膨脹圖減去腐蝕圖,dilation - erosion,這樣會得到物體的輪廓:
其它形態學運算
頂帽:原圖減去開運算后的圖:src - opening
tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
黑帽:閉運算后的圖減去原圖:closing - src
blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)