记录Opencv在相机设备上显示帧率的解决方案

转载链接:

https://www.toolify.ai/zh/ai-news-cn/python%E5%92%8Copencv-%E8%AE%A1%E7%AE%97%E5%92%8C%E6%98%BE%E7%A4%BA%E8%A7%86%E9%A2%91%E5%B8%A7%E7%8E%87fps-1893250

1. 计算FPS

在计算FPS之前,我们首先需要了解如何测量程序处理每帧所需的时间。我们将使用Python的time模块来测量两个时间戳之间的差异。下面是计算帧处理时间和FPS的代码示例:

import time

t_last = time.time()
while True:
    # 处理帧的代码
    dt = time.time() - t_last
    fps = 1.0 / dt
    t_last = time.time()

通过测量两个时间戳之间的差异,我们可以得到每帧处理的时间(以秒为单位)。然后,通过将1除以处理时间,即可得到帧率(FPS)。

2.显示FPS

要在视频窗口中显示FPS,我们将使用OpenCV的cv2.putText()函数将文本添加到帧上。我们可以选择位置、颜色、字体和字体大小等参数来自定义显示。

import cv2

while True:
    # 处理帧的代码

    # 设置要显示的文本
    text = f"FPS: {int(fps)}"

    # 在帧上添加文本
    cv2.putText(frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

    # 显示帧
    cv2.imshow("Video", frame)

在以上代码中,我们将FPS转换为整数,并将其放在文本中。然后,我们使用cv2.putText()函数将文本添加到帧的指定位置上。最后,我们使用cv2.imshow()函数显示帧。

3.施加低通滤波

为了平滑FPS数据,我们可以使用低通滤波器。低通滤波器会削弱高频噪声,使数据更平滑。我们可以通过给旧过滤值加权并将其与新测量值相结合来实现。

frames_per_second_filtered = 30

while True:
    # 处理帧的代码

    # 计算旧的过滤值
    frames_per_second_filtered = frames_per_second_filtered * 0.97 + fps * 0.03

    # 设置要显示的文本
    text = f"FPS: {int(frames_per_second_filtered)}"

    # 在帧上添加文本
    cv2.putText(frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

    # 显示帧
    cv2.imshow("Video", frame)

在以上代码中,我们使用frames_per_second_filtered变量保留过去的过滤值,并将其与新的FPS测量结果相结合。通过调整用于旧值的权重和新值的权重,我们可以根据实际情况平衡滤波结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值