喜歡使用 Arduino 或樹莓派的 Maker 們,應該都很清楚 PIR 這種模組,圓圓的白色蓋子下藏的是對紅外線變化特別敏感的 sensor。由於人或動物均會輻射出微量的紅外線,因此透過 PIR 對於週遭紅外線的變化感應,我們就能判斷是否有人在移動。
透過 OpenCV 進行影像處理,我們也能達到類似的功能:當影像中有物體移動時,能把該物體抓取並顯示出來,該方法非常的簡單,我們來看看怎麼做到的。
cv2.absdiff
此指令依其字面意思是「差異的絕對值」,的確,它的功能就是將兩張相片相減後取絕對值。例如,我們將影片中連續兩個 frame 進行 cv2.absdiff,單憑肉眼似乎感覺不出前後兩張 frame 的差異,但使用 cv2.absdiff 之後便會得到如上的結果。
憑肉眼分辨不出差別的兩張 frame,使用 cv2.absdiff 後可以看出其些微差異
前後 frame 的差異形成了較淺的顏色,因此,我們發現 cv2.absdiff 的好用之處在於它不但能取得移動中的物體,還能過濾掉相片中相同的雜物背景;然而,物體移動是漸進的,因此明顯的差異僅在於「物體邊緣」,中間部份由於材質顏色相同因此差異不明顯,這使得移動中的物體看起來像是由「線條」組成的的輪廓。
如果我們將其中一張相片換成無人的背景圖,兩者進行 cv2.absdiff 後就能得到較為完整的物件形狀。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏