Python+OpenCV圖像處理之開閉操作


開操作:圖像形態學的重要操縱之一,基於膨脹與腐蝕操作組合形成的;主要是應用在二值圖像分析中,灰度圖像亦可

開操作 = 腐蝕+膨脹 ,輸入圖像 + 結構元素

作用:用來消除小物體、平滑較大物體的邊界的同時並不明顯改變其面積,提取水平或豎直的線

閉操作:圖像形態學的重要操縱之一,基於膨脹與腐蝕操作組合形成的;主要是應用在二值圖像分析中,灰度圖像亦可

閉操作 = 膨脹+腐蝕 ,輸入圖像 + 結構元素

作用:用來填充物體內細小空洞、連接鄰近物體、平滑其邊界的同時並不明顯改變其面積

python實現

import cv2


def open_demo(image):
    print(image.shape)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    cv2.imshow("binary", binary)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
    cv2.imshow("open result", binary)


def close_demo(image):
    print(image.shape)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    cv2.imshow("binary", binary)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
    cv2.imshow("close result", binary)


if __name__ == "__main__":
    img = cv2.imread("image/open.jpg")
    cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
    cv2.imshow("input image", img)
    open_demo(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

開操作結果,盡量保留其他結構元素不變,消除小物體

 

當我們改變內核的大小,就能達到不同的效果,比如我們設置ksize=(15,1),就可以提取圖像中的水平直線

 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 1))
 binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)

同理,我們讓ksize=(1,15),就可以提取圖像中的垂直直線。結果如下

閉操作結果,填充封閉區域,其他保持不變

當我們改變內核的形狀,也能達到不同的效果,比如提取圖像中的圓

 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
 binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)

結果如下

src參數:輸入圖像

op參數:操作類型

  MORTH_OPEN                函數做開運算

  MORTH_CLOSE              函數做閉運算

  MORTH_GRADIENT       函數做形態學梯度運算

  MORTH_TOPHAT            函數做頂帽運算

  MORTH_BLACKHAT       函數做黑帽運算

  MORTH_DILATE              函數做膨脹運算

  MORTH_ERODE             函數做腐蝕運算

kernel參數 :內核類型,用getStructuringElement函數得到


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM