iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1

當我們在使用OpenCV編寫移動偵測相關的應用時,常會需要取兩張圖片的不同點,從而感測出哪些東西經過了變動,而這個需求完全可以用函式——cv2.absdiff做到。

import cv2
import numpy as np

之前我們有講過,當我們用OpenCV讀取圖片,圖片在內部暫存的格式其實是一個二維陣列,而cv2.absdiff函式的作用是取兩個numpy陣列差的絕對值,藉由解析前後兩個陣列的不同之處,從而做到每秒偵測變動的效果。

A = np.array([10, 30, 50], dtype=’uint8′)

B = np.array([50, 30, 10], dtype=’uint8′)

我們先宣告兩個元素不同的陣列,然後用cv2.absdiff試驗看看:

C = cv2.absdiff(A, B)

當我們執行print(C),結果會是這樣的:

[40, 0, 40]

因為cv2.absdiff取的是兩個陣列的差值,所以不管AB哪邊大哪邊小,它只會留下兩個相對元素相差的值,應用在圖片這種二維陣列也是同理。

而且因為它只取差值的特點,圖片背景這類不會變動的靜態值會被忽略,等於是直接省去消除背景的步驟,相當適合做動態偵測方面的功能。

下章我們要實際操作看看,用cv2.absdiff配合攝像頭做簡單的動態偵測。


上一篇
Day25-遺照(?)拍攝
下一篇
Day27-移動偵測1
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言