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

使用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

#
  • 5
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,这是一个比较复杂的问题,需要分几个步骤来实现。我会尽量详细地回答你,如果有不明白的地方,可以再问我。 首先,你需要使用PythonOpenCV库来读取视频文件。代码示例如下: ```python import cv2 cap = cv2.VideoCapture('video.mp4') while True: ret, frame = cap.read() if not ret: break # 在这里进行你的处理,比如抽、编码成PNG格式等 ``` 在上面的代码中,我们使用`cv2.VideoCapture`打开了一个视频文件,并通过循环不断读取视频。接下来,你可以在循环中进行你的处理。 对于抽,你可以设置一个计器,每隔一定就保存一。比如,下面代码中的`count`变量控制了每10保存一次: ```python import cv2 cap = cv2.VideoCapture('video.mp4') count = 0 while True: ret, frame = cap.read() if not ret: break count += 1 if count % 10 == 0: # 在这里将编码成PNG格式并发送到云端 ``` 对于编码成PNG格式,你可以使用OpenCV的`cv2.imencode`函。示例如下: ```python import cv2 import numpy as np frame = cv2.imread('frame.jpg') ret, png_data = cv2.imencode('.png', frame) # 将png_data发送到云端 ``` 在上面的代码中,我们首先读取了一个JPEG格式的图片,并使用`cv2.imencode`将其编码成了PNG格式。编码后的据存储在`png_data`变量中,可以直接发送到云端进行检测。 至于如何发送据到云端,这取决于你使用的云平台和通信协议。常见的方式包括HTTP协议、MQTT协议等。 最后,为了保证程序的流畅运行,你可能需要将读取视频和处理视频的代码分别放在不同的线程中运行。这里涉及到多线程编程的知识,需要注意线程安全问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值