當我們在使用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
取的是兩個陣列的差值,所以不管A
和B
哪邊大哪邊小,它只會留下兩個相對元素相差的值,應用在圖片這種二維陣列也是同理。
而且因為它只取差值的特點,圖片背景這類不會變動的靜態值會被忽略,等於是直接省去消除背景的步驟,相當適合做動態偵測方面的功能。
下章我們要實際操作看看,用cv2.absdiff
配合攝像頭做簡單的動態偵測。