2017-08-24 10 views
-1

私のカメラと固定フレームレートで25fpsでビデオをキャプチャし、OpenCVで読み込もうとしました。固定フレームレートのビデオファイルを読む

私はOpenCVでビデオファイルを読むと再生しますが、再生は非常に高速です。 自分のプログラムで25 fpsでビデオを再生したい。 25 fpsでビデオファイルを読むためにOpenCVを設定するには?

マイコード:

import numpy as np 
import cv2 

cap = cv2.VideoCapture('vtest.avi') 

while(cap.isOpened()): 
    ret, frame = cap.read() 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

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

cap.release() 
cv2.destroyAllWindows() 

答えて

-1

あなたは、私はいくつかの解決策を見つけた

cap.set(cv2.cv.CV_CAP_PROP_FPS, fps) 
+0

申し訳ありませんが、私はopencv 3を使用していますが、cv2.cv.CV_CAP_PROP_FPSは見つかりませんでした。 –

+0

これは、ビデオファイルを読むことに全く影響しません。 (そして、あなたが必要とする最後のものは何もしない時間を無駄にするあなたのI/Oコードです)。 –

0

以下 'FPS' の代わりに、必要なFPSを追加することができます。 ループをキャプチャするために遅延時間を置いています。私はビデオファイルから新しいイメージをキャプチャする前に、遅延をチェックします。これが私のソリューションコードです。 みなさん、ありがとうございます。

import numpy as np 
import cv2 
from time import time as timer 
import sys 

    video = cv2.VideoCapture('2.avi') 
    fps = video.get(cv2.CAP_PROP_FPS) 
    fps /= 1000 
    framerate = timer() 
    elapsed = int() 
    cv2.namedWindow('ca1', 0) 
    while(video.isOpened()): 

     start = timer() 
     # print(start) 
     ret, frame = video.read() 

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

     diff = timer() - start 
     while diff < fps: 
      diff = timer() - start 

     elapsed += 1 
     if elapsed % 5 == 0: 
      sys.stdout.write('\r') 
      sys.stdout.write('{0:3.3f} FPS'.format(elapsed/(timer() - framerate))) 
      sys.stdout.flush() 

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

追加のビジー待機ではなく、単に正しい待ち時間で 'waitKey'を使用するのはなぜですか? –

+0

ダンテ・マセクの提案に感謝します。 –

関連する問題