2015-11-25 2 views
0

Я пытаюсь сделать разницу кадра это мой код нижеразница кадра с помощью питона

import numpy as np 
import cv2 

current_frame =cv2.VideoCapture(0) 


previous_frame=current_frame 


while(current_frame.isOpened()): 


current_frame_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY) 
previous_frame_gray= cv2.cvtColor(previous_frame, cv2.COLOR_BGR2GRAY) 

frame_diff=cv2.absdiff(current_frame_gray,previous_frame_gray) 


cv2.imshow('frame diff ',frame_diff) 


cv2.waitKey(1) 

current_frame.copyto(previous_frame) 
ret, current_frame = current_frame.read() 


current_frame.release() 
cv2.destroyAllWindows() 

моя проблема заключается в том, что я попытался создать пустую рамку, чтобы сохранить первый кадр из current_frame

previous_frame=np.zeros(current_frame.shape,dtype=current_frame.dtype) 

Но я думаю, что это не правильно, то я пытался передать current_frame так:

previous_frame=current_frame 

Теперь я получаю Тхи с:

current_frame_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY) TypeError: src is not a numpy array, neither a scalar

Так что я должен сделать для этого?

Спасибо за помощь

ответ

1

Вы перепутали объект видеозахвата и раму.

Я также внес небольшие изменения в копию кадра и waitkey.

import cv2 

cap = cv2.VideoCapture(0) 
ret, current_frame = cap.read() 
previous_frame = current_frame 

while(cap.isOpened()): 
    current_frame_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY) 
    previous_frame_gray = cv2.cvtColor(previous_frame, cv2.COLOR_BGR2GRAY)  

    frame_diff = cv2.absdiff(current_frame_gray,previous_frame_gray) 

    cv2.imshow('frame diff ',frame_diff)  
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

    previous_frame = current_frame.copy() 
    ret, current_frame = cap.read() 

cap.release() 
cv2.destroyAllWindows() 
+0

спасибо большое – Musa

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