iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
1

在開始編寫程式之前,讓我們先匯入必要的函式庫。

import cv2
import numpy as np

本章我們會用到VideoCapture,所以記得先設置好:

cap = cv2.VideoCapture(0)

要想使用cv2.absdiff找出絕對差值,那麼兩個大小相同的陣列是必須要有的,我們用cap.read從攝像頭連續讀取兩張圖片存入變數——拍攝時在攝像頭前稍微移動一下,比如揮揮手。

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)

接著就可以用cv2.absdiff函式計算兩張灰階影像的差異值:

result = cv2.absdiff(blur1, blur2)

將計算後的resultcv2.imshow印出來:

cv2.imshow("diffShow",result)

cap.release()
cv2.destroyAllWindows()

可以看到結果是一張背景全黑,只有些微白色輪廓的灰階圖。

這是因為cap.read進來的兩張原圖的背景沒有差值,所以被標示為黑色。而剛才我們在拍照時移動造成的色階差,使得函式判定兩張圖片在少許部份存在差值,經過計算後重新賦值,差值越大顏色越亮,也就達到只留移動軌跡的效果。

如果要寫移動捕捉的功能,用cv2.absdiff基本已經足夠,但是這樣得來的結果還是比較模糊,所以下章會接著講取絕對值之後對結果的後續處理。


上一篇
Day26-圖像絕對值
下一篇
Day28-移動偵測2
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言