2015-11-20 50 views
2

所以基本上我試圖使用OpenCV-Python來做運動檢測。我使用this教程來做到這一點,這裏是我的代碼。知道圖像中是否有白色像素的有效方法?

import cv2 

def diffImg(t0, t1, t2): 
    d1 = cv2.absdiff(t2, t1) 
    d2 = cv2.absdiff(t1, t0) 
    return cv2.bitwise_and(d1, d2) 


cap = cv2.VideoCapture(0) 

t = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY) 
tp = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY) 
tpp = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY) 

while cap.isOpened(): 
    img = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY) 
    img2 = diffImg(t,tp,tpp) 

cv2.imshow("Motion", img2) 
t=tp 
tp=tpp 
tpp=img 

key = cv2.waitKey(10) 

if key == 27 : 
    cv2.destroyAllWindows() 
    break 

我想在控制檯上打印有移動檢測與否。 有運動時,輸入圖像中有白色像素。 但我不知道如何在輸入圖像中找到白色像素。 任何人都可以告訴我如何查找diffImg返回的圖像中是否有白色像素?

+0

OpenCV提供countNonZero(),例如。可能某些內置的python(numpy)函數更快。也許「任何」或「全部」? – Miki

+1

也許只是找到最亮的像素(即最大),看看是否是白色。 –

回答

1

你可以看看OpenGL的countNonZero函數。

實施例由巴基爾·坎提供:

if cv2.countNonZero(img2) > 29700: 
    print("Motion") 
else: 
    print("No Motion") 
+3

至少提供一個例子,或者這個答案應該是一個評論 – Miki

+0

太棒了!謝謝:) @Miki這裏的例子 'if cv2.countNonZero(img2)> 29700: print(「Motion」) else: print(「No Motion」)' –

相關問題