python opencv 获取fps 帧率

使用OpenCV获取摄像头帧率与性能分析
该博客介绍了如何使用OpenCV库在Python中打开默认摄像头,并通过两种方式获取帧率:直接使用`cv2.CAP_PROP_FPS`属性(在某些情况下可能返回异常值)以及通过计时器计算实际帧率。博主还展示了如何计算在指定帧数下捕获视频所用的时间,从而估算出实际的帧率。
#!/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()

注意

cap.get(cv2.CAP_PROP_FPS) 有时会获取到异常值 180000.0,所以当异常时使用时间差的方式获取
Python中使用OpenCV实时显示帧率到窗口,通常涉及到监控摄像头、处理帧、测量时间和计算帧率等步骤。以下是一个简单的示例: ```python import cv2 import time def show_framerate(frame): cap = cv2.VideoCapture(0) # 使用默认摄像头 previous_time = time.time() # 上一帧的时间记录 frame_count = 0 # 每秒帧数计数 font = cv2.FONT_HERSHEY_SIMPLEX # 字体设置 fps = 0 # 初始帧率 while True: ret, frame = cap.read() # 读取帧,ret表示是否成功,frame为图像矩阵 if not ret: print("Error reading frame!") break # 图像处理(例如灰度转换、滤波等) processed_frame = ... # 计算当前帧的时间 current_time = time.time() time_difference = current_time - previous_time # 去除非常微小的误差 # 只有当时间超过一秒时才计算帧率 if time_difference > 1: frame_rate = frame_count / time_difference # 计算帧率 frame_count = 0 # 重置帧数计数 fps = round(frame_rate, 2) # 四舍五入到小数点后两位 text = f"FPS: {fps}" # 在图像上绘制帧率信息 cv2.putText(processed_frame, text, (10, 30), font, 0.7, (0, 255, 0), 2) # 显示帧 cv2.imshow('Video with FPS', processed_frame) # 更新时间记录 previous_time = current_time # 等待用户按键(按 'q' 键退出) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 释放摄像头资源 cv2.destroyAllWindows() # 关闭所有窗口 # 开始实时显示帧率 show_framerate() ``` 在这个示例中,程序持续读取摄像头帧,并在每个循环中检查已过去的时间,以此来计算每秒钟的帧数。将结果作为文字添加到显示的图像上。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值