OpenCVで動画のFPSを計測する方法

 

こんにちは。のっくんです。

 

今日は画像処理でよく使われる、FPS(Frame Per Second)について勉強したいと思います。

 

以下のサイトにちょうど良い内容が書かれていますので、ベースにしたいと思います。

 

Find frame rate (frames per second-fps) in OpenCV (Python/C++)

 

FPSはその名の通り、1秒間で取得できるフレーム数のことです。

 

この値が大きければ大きいほど、動画がサクサク動くってことです。

 

動画ファイルの場合はFPSを取得することができますが、webカメラやラズパイのカメラで撮影する場合は実際に測ってみないと分かりません。

 

この記事では、Pythonのコードを書いてFPSの計測をしてみようと思います。

計測してみた環境は以下の通り。

  • Python 3.5
  • OpenCV 3.4

 

FPSを求める方法ですが、FPSの定義通りに、

FPS=フレーム数/フレームを取得するのにかかった時間(秒)

 

で求めます。

フレームを取得するのにかかった時間は、

フレームを取得するのにかかった時間 = フレームを取得し終わった時間ーフレームを取得する前の時間

で求めます。

 

import cv2
import time

# カメラを起動する
video = cv2.VideoCapture(0)

fps = video.get(cv2.CAP_PROP_FPS)
print("FPSの設定値、video.get(cv2.CAP_PROP_FPS) : {0}".format(fps))

# 取得するフレームの数
num_frames = 120

print("取得中 {0} frames".format(num_frames))

# 開始時間
start = time.time()

# フレームを取得する
for i in range(0, num_frames):
    ret, frame = video.read()

# 終了時間
end = time.time()

# Time elapsed
seconds = end - start
print("経過時間: {0} seconds".format(seconds))

# Calculate frames per second
fps = num_frames / seconds
print("計算したFPS : {0}".format(fps))

# Release video
video.release()

 

実行結果は以下の通り。

(cv) pi@raspberrypi:~/tmp $ python count_fps.py 
FPSの設定値、video.get(cv2.CAP_PROP_FPS) : 30.0
取得中 120 frames
経過時間: 4.413674831390381 seconds
計算したFPS : 27.188228536128477

 

設定値が30FPSなのに対して、計測値は27FPSと少し下回っています。

通信速度と同じで、実測値は下がるみたいです。

 

おわり。