2009-03-02 28 views
4

作爲一個玩具項目,我想編寫一個應用程序,該應用程序將從網絡攝像頭拍攝照片,然後檢測其中的更改。我想檢測是否有人走在攝像頭前面。檢測連續兩張圖片的變化

你能告訴我一些關於如何檢測兩次連續拍攝的重大變化的指示嗎?

回答

1

Code Project是一個不錯的文章,解釋一個可能的解決方案。

11

將每個像素亮度值從一個圖像減去另一個圖像。

這會給你每個像素移動物體的高值,以及物體相同的情況下的低值。總計這些值並檢查它是否高於某個閾值以查看是否發生了重大更改。

我拉着我的手的照片從我的筆記本電腦顯示此:

alt text

+1

在自然光線下,當太陽穿過天空時,此方法會產生誤報,改變光照級別並移動陰影。 – 2009-03-02 15:04:00

2

我會通過圖像縮小到像30K到60K的像素開始。這不僅會加快計算速度,而且還會擺脫微小的無關緊要的變化。例如,您不想在靠風移動的敞開窗戶附近檢測窗簾。

接下來,求和像素值的平方差。如果你想徹底地做到這一點,你可以對R,G和B分別做:

Delta := 0; 
for y := 0 to Im1.Height do begin 
    for x := 0 to Im1.Width do begin 
    DeltaR := (Im1[x,y].Red - Im2[x,y].Red)^2; 
    DeltaG := (Im1[x,y].Green - Im2[x,y].Green)^2; 
    DeltaB := (Im1[x,y].Blue - Im2[x,y].Blue)^2; 
    Delta := Delta + DeltaR + DeltaG + DeltaB; 
    end; 
end; 

if (Delta > Treshold) then 
    Say('Hi Bob!'); 

(這僅僅是僞代碼和代碼會處理得相當緩慢,谷歌「掃描線」,如果你想處理快速的圖像中的所有像素)

您可能要憑經驗定義treshold值:相機慢慢走,最好穿的衣服相匹配的背景顏色,看看你會得到什麼三角洲的。
跳幀應該會提高靈敏度。