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 学习笔记
Dec 27 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 Python
Django中url的反向查询的方法
Mar 14 Python
python的pip安装以及使用教程
Sep 18 Python
django项目搭建与Session使用详解
Oct 10 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
8种常用的Python工具
Aug 05 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 Python
用Python将GIF动图分解成多张静态图片
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
You might like
PHP 创建标签云函数代码
2010/05/26 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python二维码生成识别实例详解
2019/07/16 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
销售文员岗位职责
2013/11/29 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python