腐蝕和膨脹是開運算和閉運算的基礎,先腐蝕然後膨脹就是開運算,而先膨脹然後腐蝕就是閉運算。
先腐蝕後膨脹的過程為開運算
erode_dilate.png
對於開運算還有乙個很重要的作用,就是消除暗背景下的較亮區域,目的是在不改變黑色撞球面積的情況下,消除球上的白色環形區域。
def erode_dilate():
i = cv2.imread("images/eight_ball.jpeg",0)
# 結構元半徑
cv2.imshow("i",i)
r = 1
i = 1
max_r,max_i = 20,20
cv2.namedwindow("morphology",1)
def nothing(*arg):
pass
cv2.createtrackbar("r","morphology",r,max_r,nothing)
cv2.createtrackbar("i","morphology",i,max_i,nothing)
while(true):
# 顯示原圖
r = cv2.gettrackbarpos('r','morphology')
i = cv2.gettrackbarpos('i','morphology')
print(r)
s = cv2.getstructuringelement(cv2.morph_rect,(2*r + 1,2*r+1))
d = cv2.morphologyex(i,cv2.morph_open,s,iterations=i)
cv2.imshow("morphology",d)
k = cv2.waitkey(5)
if k==27:
break
cv2.destroyallwindows()
這個函式的第乙個引數表示核心的形狀,有三種形狀可以選擇。
第二和第三個引數分別是核心的尺寸以及錨點的位置。一般在呼叫erode以及dilate函式之前,先定義乙個mat型別的變數來獲得
getstructuringelement 函式的返回值: 對於錨點的位置,有預設值point(-1,-1),表示錨點位於中心點。element 形狀唯一依賴錨點位置,其他情況下,錨點只是影響了形態**算結果的偏移。
閉運算與開運算的操作相反,閉運算是對影象先膨脹後腐蝕。先膨脹,再腐蝕,可清除小黑點。
目的是去掉所有骰子上的黑色區域。同樣知道膨脹操作可以消除黑色,但是如果是膨脹會增大骰子的面積,而閉運算恰恰可以避免這一點,消除黑色同時不會改變骰子的面積。
def erode_dilate():
i = cv2.imread("images/toss_die.jpeg",0)
# 結構元半徑
cv2.imshow("i",i)
r = 1
i = 1
max_r,max_i = 20,20
cv2.namedwindow("morphology",1)
def nothing(*arg):
pass
cv2.createtrackbar("r","morphology",r,max_r,nothing)
cv2.createtrackbar("i","morphology",i,max_i,nothing)
while(true):
# 顯示原圖
螢幕快照 2019-12-27 下午9.28.12.png
開運算和閉運算
開運算 閉運算 膨脹和腐蝕介紹 f imread resource openclose.png bw im2bw f 轉換為二值圖 se strel square 5 方形結構元素 se strel disk 5 圓盤形結構元素 imshow bw 原影象 title 開閉運算原始影象 fo imo...
開運算 閉運算
開運算數學上是先腐蝕後膨脹的結果 開運算的結果為完全刪除了不能包含結構元素的物件區域,平滑 了物件的輪廓,斷開了狹窄的連線,去掉了細小的突出部 開運算數學上是先腐蝕後膨脹的結果 開運算的結果為完全刪除了不能包含結構元素的物件區域,平滑 了物件的輪廓,斷開了狹窄的連線,去掉了細小的突出部分 閉運算在數...
膨脹,腐蝕,開運算和閉運算
膨脹,腐蝕,開運算和閉運算是影象處理中形態學的一部分,其數學基礎是集合論。1.腐蝕是一種消除邊界點,使邊界向內部收縮的過程。可以用來消除小且無意義的物體。腐蝕的演算法 用3x3的結構元素,掃瞄影象的每乙個畫素 用結構元素與其覆蓋的二值影象做 與 操作 如果都為1,結果影象的該畫素為1。否則為0。結果...