Python opencv一次读取视频里面多张视频帧

背景

在对视频进行人脸打码时,需要从磁盘读取视频帧,然后通过训练好的深度神经网络模型进行人脸监测,获取到人脸的位置后,然后进行打码。

opencv读取多张视频帧,提高性能

由于opencv每次只能读取一张视频帧,然后把这一张视频帧送入神经网络模型进行人脸监测,这样逐帧的处理视频,速度相对来说比较慢。

为了提高性能,需要进行优化。如果对训练深度神经网络模型,原理了解的话,那么可以每次传入多个视频帧,这样每次作为一个batch,使计算效率更高一些。深度神经网络模型在训练时,是每次处理一个batch图像,来通过梯度下降,优化模型参数。

这样就需要opencv每次读取多个视频帧,但是opencv里面没有这样的方法,只能自己去实现这样的方法。

实例代码

import cv2
import numpy as np

video_full_path_and_name='./test.mp4'
videoCapture = cv2.VideoCapture()  # 创建视频读取对象
videoCapture.open(video_full_path_and_name)  # 打开视频
fps = int(round(videoCapture.get(cv2.CAP_PROP_FPS),0))
image_width=int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH))   #视频帧宽度
image_height=int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))   #视频帧高度
image_channel=3   #RGB 3通道

ret=True
while ret:
    img_batch_rgb=np.empty(shape=[0,image_height,image_width,image_channel],dtype=np.uint8)
    #每次读取1s的视频帧,可以根据自己的内存大小,每次读取多秒
    for i in range(fps*1):
        ret, img = videoCapture.read()
        #读取到图像帧   
        if ret:
            # opencv:BGR  转换为 RGB
            rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            img_batch_rgb=np.append(img_batch_rgb,np.expand_dims(rgb_img, 0),axis=0)
        else:
            break

print(img_batch_rgb.shape,flush=True)
#img_batch_rgb      #该变量即为多个视频帧

历史相关文章


以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号,不定期分享干货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据人阿多

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值