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

作者:BlackBack_ 时间:2023-02-13 01:40:19 

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的理解以及大佬的项目代码灵感进行编写;

大佬的项目代码地址

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

来源:https://blog.csdn.net/you2336/article/details/117732562

标签:python,opencv,视频,抽帧
0
投稿

猜你喜欢

  • Python实现获取照片的地理定位信息

    2023-06-30 01:39:54
  • django中模板的html自动转意方法

    2023-06-28 15:33:49
  • ASP利用XMLHTTP实现表单提交以及cookies的发送的代码

    2011-04-15 10:37:00
  • python数据结构链表之单向链表(实例讲解)

    2021-01-17 12:51:19
  • 如何用C代码给Python写扩展库(Cython)

    2023-06-08 17:06:32
  • python的Template使用指南

    2023-10-14 01:30:58
  • Python中的测试模块unittest和doctest的使用教程

    2021-09-07 05:50:54
  • python命名空间(namespace)简单介绍

    2022-06-21 23:26:53
  • django的分页器Paginator 从django中导入类

    2022-02-07 04:24:29
  • 如何把ACCESS转成SQL数据库

    2007-08-11 13:51:00
  • 框架iframe子页面,自适应高度方法

    2008-06-07 13:31:00
  • python操作excel之xlwt与xlrd

    2023-02-11 08:05:52
  • asp动态页面生成html页面

    2008-10-24 09:03:00
  • ASP隐藏真实文件的下载功能实现代码

    2011-04-14 11:12:00
  • Matplotlib使用字符串代替变量绘制散点图的方法

    2021-04-18 06:10:11
  • Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)

    2022-04-13 02:53:50
  • PHP实现的登录,注册及密码修改功能分析

    2023-11-14 21:45:29
  • Django 自定义404 500等错误页面的实现

    2022-06-10 17:31:40
  • 通过XSL转换XML文件步骤

    2008-01-27 16:03:00
  • 基于Python+Tkinter实现一个简易计算器

    2021-06-23 00:40:29
  • asp之家 网络编程 m.aspxhome.com