在開始編寫程式之前,讓我們先匯入必要的函式庫。
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)
將計算後的result
用cv2.imshow
印出來:
cv2.imshow("diffShow",result)
cap.release()
cv2.destroyAllWindows()
可以看到結果是一張背景全黑,只有些微白色輪廓的灰階圖。
這是因為cap.read
進來的兩張原圖的背景沒有差值,所以被標示為黑色。而剛才我們在拍照時移動造成的色階差,使得函式判定兩張圖片在少許部份存在差值,經過計算後重新賦值,差值越大顏色越亮,也就達到只留移動軌跡的效果。
如果要寫移動捕捉的功能,用cv2.absdiff
基本已經足夠,但是這樣得來的結果還是比較模糊,所以下章會接著講取絕對值之後對結果的後續處理。