2017-05-23 7 views
0

私は計算するときよりも多くの画像を保存するので(fps *秒)、このコードでエラーが発生する可能性があります。また、最後にNULLイメージを保存します。私はこれが画像を保存するための最も基本的なコードであり、エラーの内容がわからないと感じています。コードでエラーが発生し、特定のfpsでopencvでフレームを抽出していますか?

また、画像を撮影するfpsレートを指定するオプションが必要です。私が使用したいと思うfpsは1 fpsです。私はこれを指定することができるopencvの機能を見つけることができなかったので、私は何とか1秒ごとにフレームを保存する方法を検討していました。もう1つのアプローチは、すべてのフレームを保存することですが、1秒ごとにフレームを繰り返して使用することができます。私はこれらのコンセプトではかなり新しいです。これらのアプローチは良いですか、私はそれらをコーディングし始めるべきですか?私はどこから始めるべきかわからない。

def extractFrames(): 

vidcap = cv2.VideoCapture('video.AVI') 
success,image = vidcap.read() 
count = 0; 
while success: 
    success,image = vidcap.read() 
    cv2.imwrite("%d.jpg" % count, image) 
    count += 1 

答えて

0

これは、あなたが要求し何をすべき:

import time,cv2 
import numpy as np 
def extractFrames(n): 
    """ 
    extract image from a live video frame at n fps, 
    if the n is smaller than the fps of the camera 
    """ 
    vidcap = cv2.VideoCapture('video.AVI') 
    now = time.time() 
    success,image = vidcap.read() 
    real_fps = 1.0/(time.time()-now); 

    if n > real_fps: 
     print('real fps is smaller than what you want , change to less than '+real_fps) 
     return 

    while success: 
     now = time.time() 
     success,image = vidcap.read() 
     cv2.imwrite("%d.jpg" % count, image) 
     ch = 0xFF & cv2.waitKey(1) 
     if ch == 27: 
      break 
     time.sleep((1.0/n) - (time.time() - now)); 


    cv2.destroyAllWindows() 
extractFrames(1) 

P.S:

私はイベントループのためのpygameののようなライブラリを使用してOpenCVのの機能の代わりに描画をお勧めします

関連する問題