iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
1

講完了影像侵蝕,我們接著來講影像膨脹。

cv2.erode相同,cv2.dilate只能用於二值化後的圖片,所以我們一樣把移動偵測的程式碼拿來用:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

img1 = cap.read()[1]
img2 = cap.read()[1]

# 彩色圖轉灰階圖
gray1 = cv2.cvtColor(t0, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(t1, cv2.COLOR_BGR2GRAY)

# 高斯模糊化處理
blur1 = cv2.GaussianBlur(grey1,(5,5),0)
blur2 = cv2.GaussianBlur(grey2,(5,5),0)

result = cv2.absdiff(blur1, blur2)

# 二值化處理
ret, th = cv2.threshold(result, 15, 255, cv2.THRESH_BINARY)

我們在底下加上一行:

dilated = cv2.dilate(th, (3,3), iterations=1)

cv2.dilate的第一個參數為二值化的影像,所以我們直接帶入變數th

cv2.erode一樣,第二個參數同樣是卷積核心的大小!這兩個函數的差別只在於一個只要核心範圍的元素值不全是1,重新賦予的值就全是0(侵蝕),一個只要核心範圍的元素值出現1,重新賦予的值就全是1(膨脹)。

第三個參數也和cv2.erode一樣是迭代次數,不需要去改動它。

影像膨脹通常是配合影像侵蝕使用,先用侵蝕函數將圖片中的輪廓變細,同時去除多餘毛點,之後再用影像膨脹函數將輪廓恢復正常大小,使圖片看上去更加清晰。

所以我們可以在移動偵測的程式碼做點改動:先把二值化後的圖片用cv2.erode侵蝕一次,再用cv2.dilate把輪廓膨脹回來,同時做到去除毛點和輪廓清晰化。

結尾

以上就是形態學的兩種影像處理函數了,隨著本章的結束,我的三十天鐵人賽也宣告完結。

經過這次比賽的經驗,我對OpenCV的應用有了更為深入的了解,希望這三十天的學習紀錄也能替後來的人起到一些幫助,如果剛開始學影像處理的初學者們能在我的參賽文章裡找到有用的知識,那我也會很高興的。

謝謝觀看。


上一篇
Day29-影像侵蝕
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言