python+opencv实现视频抽帧示例代码


Posted in Python onJune 11, 2021

1、数据集简述:

       虽然有主流庞大的COCO、VOC数据集,但是科研人员仍需要特殊领域要求的数据集,所以采用人工实地采集的方式进行收集数据集图像;通过拍照收集图像过于繁琐,所以通常是将摄像头无规则的移动旋转以及远近拉缩,进而录制视频;再通过视频抽帧的方式得到大量的图像,再将这些图像进行人工标注处理。

        博主通过一个水下录制视频为例子,当这类图像在网上鲜有存在时,要求有关技术人员进行实拍采集,下图即为采集得到的视频。

python+opencv实现视频抽帧示例代码

        为了避免不符合项目要求的数据增强,博主要求技术人员在录制视频时最大程度地让摄像头进行移动、旋转以及远近调节等;这样抽帧后的图像更具有泛化性

2、代码介绍:

下面是采用以帧数为间隔的方法进行视频抽帧,博主个人认为这样子的方式调节间隔更加方便,更符合个人习惯。

import cv2
from PIL import Image
import numpy as np


cap = cv2.VideoCapture("D:/Download/ANMR0005.mp4")  # 获取视频对象
isOpened = cap.isOpened  # 判断是否打开
# 视频信息获取
fps = cap.get(cv2.CAP_PROP_FPS)

imageNum = 0
sum=0
timef=15  #隔15帧保存一张图片

while (isOpened):

    sum+=1

    (frameState, frame) = cap.read()  # 记录每帧及获取状态

    if frameState == True and (sum % timef==0):

        # 格式转变,BGRtoRGB
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # 转变成Image
        frame = Image.fromarray(np.uint8(frame))

        frame = np.array(frame)

        # RGBtoBGR满足opencv显示格式
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

        imageNum = imageNum + 1
        fileName = 'D:/Download/video_image/image' + str(imageNum) + '.jpg'  # 存储路径
        cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100])
        print(fileName + " successfully write in")  # 输出存储状态

    elif frameState == False:
        break

print('finish!')
cap.release()

3、代码效果:

pycharm运行py文件后结果框显示的内容:

python+opencv实现视频抽帧示例代码

视频抽帧得到的图像保存至指定的文件夹:

python+opencv实现视频抽帧示例代码

抽帧得到的图片示例:

python+opencv实现视频抽帧示例代码 

4、相关说明: ①本代码依据录制视频、对opencv的理解以及大佬的项目代码灵感进行编写;

大佬的项目代码地址

②本数据集属于私人闭源,不公开。

到此这篇关于python+opencv实现视频抽帧的文章就介绍到这了,更多相关python opencv视频抽帧内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
PYTHON压平嵌套列表的简单实现
Jun 08 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
python八大排序算法速度实例对比
Dec 06 Python
Python实现GUI学生信息管理系统
Apr 05 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Python pandas用法最全整理
Aug 04 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
python中sys模块的介绍与实例
Apr 17 Python
用Python将GIF动图分解成多张静态图片
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
You might like
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
Python如何为图片添加水印
2016/11/25 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python实现树形打印目录结构
2018/03/29 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python多进程原理与用法分析
2018/08/21 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python集合是否可变总结
2019/06/20 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
linux面试题参考答案(2)
2015/12/06 面试题
最热门的自我评价
2013/12/30 职场文书
大二自我鉴定
2014/01/31 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
十八大宣传标语
2014/10/09 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
电话营销开场白
2015/05/29 职场文书
培训心得体会怎么写
2016/01/25 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记