原圖:
開運算:
先腐蝕后膨脹叫開運算(因為先腐蝕會分開物體,這樣容易記住),其作用是:分離物體,消除小區域。這類形態學操作用cv2.morphologyEx()
函數實現:
下面兩份代碼分別對應通過先腐蝕后膨脹的效果 和 直接通過開運算的效果
import cv2 import numpy as np img = cv2.imread("zw.jpg", 0) kernel = np.ones((3, 3), np.uint8) kerne2 = np.ones((5, 5), np.uint8) erodtion = cv2.erode(img, kernel, iterations=2) dilation = cv2.dilate(erodtion, kerne2, iterations=1)
import cv2 import numpy as np img = cv2.imread("zw.jpg", 0) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形結構 open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
可以看到兩者差別不大。
閉運算
先膨脹后腐蝕(先膨脹會使白色的部分擴張,以至於消除/"閉合"物體里面的小黑洞,所以叫閉運算)
import cv2 import numpy as np img = cv2.imread("zw.jpg", 0) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形結構 open = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=2)
可以看出左側原圖中的黑點,通過閉運算后被填充掉了