转载链接:
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测量结果相结合。通过调整用于旧值的权重和新值的权重,我们可以根据实际情况平衡滤波结果。