開運算和閉運算 計算機視覺 開運算和閉運算

2021-10-12 08:55:53 字數 2604 閱讀 4330

腐蝕和膨脹是開運算和閉運算的基礎,先腐蝕然後膨脹就是開運算,而先膨脹然後腐蝕就是閉運算。

先腐蝕後膨脹的過程為開運算

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。結果...