使用Python,OpenCV处理视频流时,获得更高FPS(Frams Per Second)的“秘密”是将I / O(即从摄像机传感器读取帧)交给线程去处理;

读取帧 I/O是阻塞型的,定义主线程处理读到的帧,一个新的线程一直读取帧,等主线程处理完,将新读取到的帧接过来继续处理;

I/O 密集型的用多线程 Threading
CPU 密集型的用多进程 MultiProcessing

不使用cv2.imshow(),相比普通的提升了 608/25~~ 2432%倍;

使用cv2.imshow() 会有1s中的延迟,对于非必要的显示,去掉将能更好的发挥多线程提高视频流的FPS。

# 使用线程化的方式提高FPS(每秒帧数 Frams per second)
# python fps_demo.py
# python fps_deom.py -d 1# 导入必要的包
from __future__ import print_function
from imutils.video import WebcamVideoStream
from imutils.video import FPS
import argparse
import imutils
import cv2# 构建命令行参数
# --num-frames 获取FPS估算值而要循环播放的帧数
# --display 指标变量,指定是否应用cv2.imshow()显示帧
ap = argparse.ArgumentParser()
ap.add_argument("-n", "--num-frames", type=int, default=100,help="# of frames to loop over for FPS test")
ap.add_argument("-d", "--display", type=int, default=-1,help="Whether or not frames should be displayed")
args = vars(ap.parse_args())# 获取视频流指针,初始化FPS计数器
print("[INFO] sampling frames from webcam...")
stream = cv2.VideoCapture(0)
fps = FPS().start()# 循环遍历一些帧
while fps._numFrames < args["num_frames"]:# 从流中获取帧,resize 宽度为400(grabbed, frame) = stream.read()frame = imutils.resize(frame, width=400)# 检查帧是否要展示if args["display"] > 0:cv2.imshow("Frame", frame)key = cv2.waitKey(1) & 0xFF# 更新FPS计数器fps.update()# 停止计数器
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))# 清理、释放资源
stream.release()
cv2.destroyAllWindows()# 创建线程化的视频流,允许摄像机传感器预热,并且启动FPS计数器
print("[INFO] sampling THREADED frames from webcam...")
vs = WebcamVideoStream(src=0).start()
fps = FPS().start()# 使用线程循环处理每一帧
while fps._numFrames < args["num_frames"]:# 从线程化的视频流中获取帧,resize到宽度为400像素frame = vs.read()frame = imutils.resize(frame, width=400)# 检查是否需要把帧通过cv2展示if args["display"] > 0:cv2.imshow("Frame", frame)key = cv2.waitKey(1) & 0xFF# 更新FPS计数器fps.update()# 停止计数 展示FPS的统计信息
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
# 做一些清理工作 释放摄像头 关闭打开的窗口
cv2.destroyAllWindows()
vs.stop()

参考博客:

  • https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/

使用Python,OpenCV线程化方式提高视频FPS(每秒帧数)相关推荐

  1. 获取视频fps、总帧数

    文章目录 前言 总帧数 FPS 前言 通过慢,但是精确的方法获取总帧数 获取视频FPS 总帧数 #path为视频路径 def frame_total_num(path):CAP = cv2.Video ...

  2. Python+OpenCV+pyQt5录制双目摄像头视频

    #Python+OpenCV+pyQt5录制双目摄像头视频 ##起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写 ...

  3. python opencv按照一定间隔保存视频帧

    python opencv按照一定间隔保存视频帧 文章目录: 一.获取视频流的相关参数 二.设置间隔保存视频帧 想实现opencv读取视频帧,按照一定的时间间隔然后保存图片下来,因为所有的帧都保存下来 ...

  4. python+opencv打开大华摄像机视频

    学习笔记 python+opencv打开大华摄像机视频 python+opencv打开大华摄像机视频 import cv2 # 大华摄像机的视频采集语句,subtype=1,辅码流.0,主码流. ca ...

  5. 在视频的左上角动态显示帧数、参看帧率

    在视频的左上角动态显示帧数: Mat current; int frameCount = 0; frameCount++; stringstream buf; buf << frameCo ...

  6. 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。

    2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数. 答案2023-02-21: 使用 github.com/moonfdd/ffmpeg-go 库,这个库比go ...

  7. Python+Opencv实现把图片转为视频

    1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

  8. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  9. opencv计算视频和摄像头的帧数及帧率(FPS)

    1.计算总帧数 python代码 import cv2video_cap = cv2.VideoCapture('video1.mp4')frame_count = 0 all_frames = [] ...

最新文章

  1. SSIS中的记录集目标
  2. spi的dma方式前四个字节_UTF-16是固定两个字节长度吗?
  3. TCP/IP协议:链路层
  4. javascript 浮点数加减乘除计算会有问题, 整理了以下代码来规避这个问题
  5. htt://3g.hn_根据我对“询问HN:谁在招聘?”的分析,开发人员技能发展趋势
  6. 去重的Set解不出“斯诺登的密码”(洛谷P1603题题解,Java语言描述)
  7. 【Flink】Flink启动报错 BindException: Could not start rest endpoint on any port in port range 7089
  8. Mybatis与JDBC的对比超详细笔记
  9. python中的类及self详解_python中的self详解与对照与网站分享
  10. Hadoop下虚拟机的创建与克隆
  11. 三菱5uplc伺服电机指令_「242本」PLC模拟量教程,含西门子、三菱、施耐德、欧姆龙等...
  12. 7 爬虫 CrawlSpider类 增量式爬虫 分布式爬虫 生产者消费者模式
  13. 基于单片机的智能视力保护监控系统设计
  14. 计算机在化学中论文3000字,计算机在化学中的应用
  15. NX/UG二次开发简单干涉
  16. 水下航行器简介及水下面临的挑战
  17. VSCode常用插件汇总
  18. C语言编程练习之水仙花数
  19. 【四月答题勋章】四月答题勋章获取方法
  20. 比亚迪DiLink深体验:让科幻般的车生活都成为实现,智能网联集大成者张这样?...

热门文章

  1. 结构感知图像修复:ICCV2019论文解析
  2. PHP7.3中fileinfo怎么安装与开启
  3. 员工信息管理系统java6_职工信息管理系统java源代码【可修改】.doc
  4. Android Read-only file system
  5. svn: Working copy locked
  6. CF533A Berland Miners
  7. AngularJS $eval $parse
  8. 自定义的类型转换器中怎样自定义错误消息?(待解答)
  9. 多个矩形,求覆盖面积,周长,及交点
  10. 学习笔记:腾讯云--域名解析