opencv 實現圖像形態學操作 膨脹和腐蝕 開閉運算 形態學梯度 頂帽和黑帽

圖像膨脹和腐蝕

圖解

膨脹和腐蝕理解

原理及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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章