opencv capture set 非常慢_OpenCV使用VideoCapture处理视频时丢失最后一些帧

使用OpenCV处理视频时,发现VideoCapture.get()获取的总帧数与实际能读取的帧数不符,导致末尾帧丢失。问题可能由于重复帧被忽略。解决方案包括使用CV_CAP_PROP_POS_MSEC以时间定位,或切换到skvideo.io.vread()进行无损读取。
摘要由CSDN通过智能技术生成

ec5c05f286c419e4b7a674eb01f17076.png

1. 问题描述

之前处理视频数据集都是抽帧后再读取图片的方法,最近想直接从视频中读,并且发现有时这样速度更快(pytorch的dataloader相同参数,UCF101加载一个epoch从7.4min降到了2.8min),但在使用opencv-python库处理视频的时候,用cv2.VideoCapture.get()得到的总帧数与实际按帧能读取得到的帧数不相同,这就导致最后一部分帧并不能读取成功。以UCF101中某个视频测试,示例如下

capture = cv2.VideoCapture('/home/data/ucf101/video/GolfSwing/v_GolfSwing_g22_c02.avi')
len_video = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
print('num of video frames :', len_video)
n = 0
lose = []
for i in range(len_video):
    ret, frame = capture.read()
    if ret:
        n += 1
    else:
        lose.append(i)
print('index :{}, read: {}'.format(i, n))
print(lose)
------------------------- pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值