2015-11-20 5 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

Возможно, просто найдите самый яркий пиксель (т. Е. Max) и посмотрите, белый ли он. –

ответ

1

Вы можете взглянуть на функцию countNonZero функции OpenCV.

Пример обеспечивается Бакир Khan:

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 ")' –

Смежные вопросы