2016-06-16 12 views
1

特定の手順のシーケンスを表示するはずの多数のビデオクリップがあるとしますが、クリップが作成されたときに、イベントの前後に不要なアクションが含まれている可能性があります。ユーザアクションに基づいてOpenCVのVideoWriterを選択的に切り替える方法

OpenCVを使用してフレーム単位で自動的にビデオを再生することができますか?オペレータは必要なアクションの開始を見てキーを押すことができます。シーケンスが終了してビデオのその部分シーケンスの新しいより小さなより正確なビデオとして保存されます。

以下のコードは、フレームによってウェブカメラのフレームに読み込むユーザーがキーボード上qキーを打つまで、ビデオに書き込む前にフレームを反転します。

フレームが入ってくるのをユーザーが確認できるようにするには、興味のあるイベントが表示されたら、VideoWriterを切り替えてディスクに書き込むことができますが、 tは常にVideoWriterに各フレームを送信するためにキーを押すと、オペレーターがイベントを見たとき、彼らはフレームwouldnによってビデオフレームを書き込む、それについて考えた後、再び

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

# Define the codec and create VideoWriter object 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 

     # write the flipped frame 
     out.write(frame) 

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

# Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 
+0

を歓迎したいですが保持されている場合、フレームは新しいビデオに書き込まれ、リリースされると録画は停止されますが再生は継続されますhttp:// opencv-pyth on-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html – mobcdi

答えて

1

をVideoWriterをオフに切り替えることができにわたって」あるする必要がありますリソースを最大限に活用し、規模を拡大することはできません。

私はCSVファイルにイベントデータを書き込むために、このコードを拡張し、他の人が改善することができた場合は、マウスの左ボタンが押さ

たときに記録タイムスタンプに基づいてサブクリップを抽出するためにMoviePyと一緒にそれを使用しますソリューションに私は、マウスのアクションをキャプチャするためにその可能性を知っているが、私はアクションをマウスの左ボタンを押した考えに修正していているのでしばらく限り、マウスボタンとしてトグルとして使用することができ、その入力

import cv2 
import numpy as np 
cap = cv2.VideoCapture('YourVideoFile.mp4') 

#Define the Mouse Callback Function 
def record_action(event,x,y,flags,param): 
    if event == cv2.EVENT_LBUTTONDOWN: 
     print "Left Button Down @ " + str(cap.get(cv2.CAP_PROP_POS_MSEC)) + " milliseconds into video \n" 
    elif event == cv2.EVENT_LBUTTONUP: 
     print "Left Button Up @ " + str(cap.get(cv2.CAP_PROP_POS_MSEC)) + " milliseconds into video \n" 

#Need to use a Named Window so it can be referenced in the mouse definition 
#and used when outputting the frames from the video in the imshow call later on 
cv2.namedWindow("RecordMe") 
#Bind the function above to the window 
cv2.setMouseCallback("RecordMe",record_action) 

while True: 
    ret, frame = cap.read() 
    #Use NamedWindow we created earlier to show the frames 
    cv2.imshow('RecordMe',frame) 
    if cv2.waitKey(30) & 0xff == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 
関連する問題