開操作
閉操作同樣使輪廓線更為光滑,但與開操作相反的是,它通常連接狹窄的間斷和長細的鴻溝,消除小的孔洞,並填補輪廓線中的斷裂。
使用結構元素 B 對集合 A 進行開操作,定義為:
閉操作
閉操作同樣使輪廓線更為光滑,但與開操作相反的是,它通常連接狹窄的間斷和長細的鴻溝,消除小的孔洞,並填補輪廓線中的斷裂。
開操作有一個簡單的幾何解釋
對形態學上的開操作和閉操作的簡單說明
import cv2 as cv def open_image(image): '圖像開操作' gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) # res=cv.bitwise_not(gray) #圖像二值化 ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow('binary',binary) #獲取形態學結構kernel,采用的形態學方式MORPH_RECT kernel=cv.getStructuringElement(cv.MORPH_RECT,(5,5)) #圖像的開操作 binary=cv.morphologyEx(binary,cv.MORPH_OPEN,kernel) cv.imshow('open',binary) def close_image(image): '圖像閉操作' gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) # res=cv.bitwise_not(gray) ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU) kernel=cv.getStructuringElement(cv.MORPH_RECT,(5,5)) #操作函數morphologyEx binary=cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel) cv.imshow('close',binary) src = cv.imread("tree.jpg") cv.imshow("原來", src) open_image(src) close_image(src) cv.waitKey(0) cv.destroyAllWindows()
閉運算用來連接被誤分為許多小塊的對象,而開運算用於移除圖像噪音形成的斑點.因此,某些情況下可以連續運用這兩種運算。如對一副二值圖連續使用閉運算和開運算,將獲得圖像中的主要對象。同樣,如果想消除圖像中的噪聲(即圖像中的“小點”),也可以對圖像先用開運算后用閉運算,不過這樣也會消除一些破碎的對象。