(ง •_•)ง[Python3 OpenCV4]13.腐蝕和膨脹

啥叫形態學操作

形態學操作其實就是改變物體的形狀,比如腐蝕就是”變瘦”,膨脹就是”變胖”,看下圖就明白了

在這裏插入圖片描述

腐蝕

import cv2
import numpy as np
img = cv2.imread('sudu.png', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel)  # 腐蝕
cv2.imshow('canny', np.hstack((img, erosion)))
cv2.waitKey(0)

這個核也叫結構元素,因爲形態學操作其實也是應用卷積來實現的。結構元素可以是矩形/橢圓/十字形,可以用cv2.getStructuringElement()來生成不同形狀的結構元素,比如:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 矩形結構
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))  # 橢圓結構
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 十字形結構

膨脹

膨脹與腐蝕相反,取的是局部最大值,效果是把圖片”變胖”:

dilation = cv2.dilate(img, kernel)  # 膨脹

開/閉運算

  • 先腐蝕後膨脹叫開運算(因爲先腐蝕會分開物體,這樣容易記住),其作用是:分離物體,消除小區域。這類形態學操作用cv2.morphologyEx()函數實現:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 定義結構元素

img = cv2.imread('j_noise_out.bmp', 0)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  # 開運算
  • 閉運算則相反:先膨脹後腐蝕(先膨脹會使白色的部分擴張,以至於消除/“閉合”物體裏面的小黑洞,所以叫閉運算)
img = cv2.imread('j_noise_in.bmp', 0)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)  # 閉運算

頂帽

原圖減去開運算後的圖:src - opening

黑帽

閉運算後的圖減去原圖:closing - src

  • 形態學操作就是改變物體的形狀,如腐蝕使物體”變瘦”,膨脹使物體”變胖”。
  • 先腐蝕後膨脹會分離物體,所以叫開運算,常用來去除小區域物體。
  • 先膨脹後腐蝕會消除物體內的小洞,所以叫閉運算。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章