In OpenCV the class VideoCapture handles reading videos and grabbing frames from connected cameras. There is a lot of information you can find about the video file you are playing by using the get(PROPERTY_NAME) method in VideoCapture. One of the common properties you may want to find is the frame rate or frames per second. You can download all code and example images used in this blog here.
How to find frame rate of a camera / webcam in OpenCV ?
In OpenCV finding the frame rate of a connected camera / webcam is not straight forward. The documentation says that get(CAP_PROP_FPS) or get(CV_CAP_PROP_FPS) gives the frames per second. Now that is true for video files, but not for webcams. For webcams and many other connected cameras, you have to calculate the frames per second manually. You can read a certain number of frames from the video and see how much time has elapsed to calculate frames per second.
Python
#!/usr/bin/env python import cv2 import time if __name__ == '__main__' : # Start default camera video = cv2.VideoCapture(0); # Find OpenCV version (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.') # With webcam get(CV_CAP_PROP_FPS) does not work. # Let's see for ourselves. if int(major_ver) < 3 : fps = video.get(cv2.cv.CV_CAP_PROP_FPS) print("Frames per second using video.get(cv2.cv.CV_CAP_PROP_FPS): {0}".format(fps)) else : fps = video.get(cv2.CAP_PROP_FPS) print("Frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps)) # Number of frames to capture num_frames = 120; print("Capturing {0} frames".format(num_frames)) # Start time start = time.time() # Grab a few frames for i in range(0, num_frames) : ret, frame = video.read() # End time end = time.time() # Time elapsed seconds = end - start print ("Time taken : {0} seconds".format(seconds)) # Calculate frames per second fps = num_frames / seconds print("Estimated frames per second : {0}".format(fps)) # Release video video.release()
C++
#include "opencv2/opencv.hpp" #include <time.h> using namespace cv; using namespace std; int main(int argc, char** argv) { // Start default camera VideoCapture video(0); // With webcam get(CV_CAP_PROP_FPS) does not work. // Let's see for ourselves. // double fps = video.get(CV_CAP_PROP_FPS); // If you do not care about backward compatibility // You can use the following instead for OpenCV 3 double fps = video.get(CAP_PROP_FPS); cout << "Frames per second using video.get(CAP_PROP_FPS) : " << fps << endl; // Number of frames to capture int num_frames = 120; // Start and end times time_t start, end; // Variable for storing video frames Mat frame; cout << "Capturing " << num_frames << " frames" << endl ; // Start time time(&start); // Grab a few frames for(int i = 0; i < num_frames; i++) { video >> frame; } // End Time time(&end); // Time elapsed double seconds = difftime (end, start); cout << "Time taken : " << seconds << " seconds" << endl; // Calculate frames per second fps = num_frames / seconds; cout << "Estimated frames per second : " << fps << endl; // Release video video.release(); return 0; }
How to find frame rate of a video in OpenCV ?
If you are reading a video file you can simply use the get method to obtain frames per second. The following examples show the usage.
Python
import cv2 if __name__ == '__main__' : video = cv2.VideoCapture("video.mp4"); # Find OpenCV version (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.') if int(major_ver) < 3 : fps = video.get(cv2.cv.CV_CAP_PROP_FPS) print ("Frames per second using video.get(cv2.cv.CV_CAP_PROP_FPS): {0}".format(fps)) else : fps = video.get(cv2.CAP_PROP_FPS) print ("Frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps)) video.release()
C++
#include "opencv2/opencv.hpp" using namespace cv; using namespace std; int main(int argc, char** argv) { // Open video file VideoCapture video("video.mp4"); // double fps = video.get(CV_CAP_PROP_FPS); // For OpenCV 3, you can also use the following double fps = video.get(CAP_PROP_FPS); cout << "Frames per second using video.get(CAP_PROP_FPS) : " << fps << endl; video.release(); return 0; }
Subscribe & Download Code
If you liked this article and would like to download code used in this post, please subscribe to our newsletter. You will also receive a free Computer Vision Resource guide. In our newsletter we share OpenCV tutorials and examples written in C++/Python, and Computer Vision and Machine Learning algorithms and news.