2016-11-15 19 views
0

私はいくつかのビデオデータを処理しようとしており、それをフレームごとに処理したいと考えています。私は各フレームの結果を見ることを望むので、フレーム処理とユーザー入力(たぶんキー)によって壊れてしまいます。ビデオプロンプトでフレームごとに処理する

Pythonでこの目的を達成する効率的な方法はありますか? これは私の現在のコードですが、これが最善の方法であるかどうかはわかりません。

**編集:**目標を達成するためにコードを変更しました。 waitKeyコマンドの別の行を追加するだけでした。 :p

import cv2 
import scipy.ndimage as ndimage 

cap = cv2.VideoCapture("#Some_Video") 

while(True): 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    fil_im = ndimage.correlate(gray, '#Some_filter') 
    cv2.imshow('filtered figure', fil_im) 

    k = cv2.waitKey(0) 
    if k == 27: 
      break 
    elif k == 32: 
      continue 
    # Continues to the next frame on 'space', quits the loop on 'esc' key. 

cap.release() 
cv2.destroyAllWindows() 

答えて

-1

cv2.waitKey(0)を使用すると、whileループの繰り返しを一時停止できます。引数0は、次のコード行に移動する前にコードを無期限に押すことを意味します。

while(True): 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    fil_im = ndimage.correlate(gray, '#Some_filter') 
    cv2.imshow('filtered figure', fil_im) 
    cv2.waitKey(0)# waits for user prompt here 

    if cv2.waitKey(0) == 'b': 
      break 
      #breaks while loop only if you press b, else it goes to next iteration 
+0

ありがとう:

はとコードを変更します!私は2つのwaitKeyコマンドを使用しました。 1つは次のフレームに進み、1つはループを完全に停止するためのものです。 – CockneyNinja

+0

私はdownvoteを考慮して、あなたの質問に答えることを願って –

+0

downvoteを持っている理由は分かりません。 :Sしかし、少なくとも私は1つupvoteを与えた。 – CockneyNinja

関連する問題