1、数据集简述:
  sMuWZhjjW ;虽然有主流庞大的 COCO、VOC数据集 ,但是科研人员仍需要 特殊领域要求的数据集 ,所以采用人工实地采集的方式进行收集数据集图像;通过拍照收集图像过于繁琐,所以通常是将摄像头无规则的移动旋转以及远近拉缩,进而 录制视频 ;再通过 视频抽帧 的方式得到大量的图像,再将这些图像进行 人工标注 处理。
博主通过一个 水下录制视频 为例子,当这类图像在网上鲜有存在时,要求有关技术人员进行实拍采集,下图即为采集得到的视频。
为了避免不符合项目要求的数据增强,博主要求技术人员在录制视频时最大程度地让摄像头进行移动、旋转以及远近调节等;这样 抽帧后的图像更具有泛化性 。
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 sMuWZhjjW 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 http://www.cppcns.com 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文件后结果框显示的内容:
视频抽帧得到的图像保存至指定的文件夹:
抽帧得到的图片示例:
4、相关说明: ①本代码依据录制视频、对opencv的理解以及大佬的项目代码灵感进行编写;
大佬的项目代码地址
②本数据集属于私人闭源,不公开。
到此这篇关于python+opencv实现视频抽帧的文章就介绍到这了,更多相关p 编程客栈 ython opencv视频抽帧内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
查看更多关于python+opencv实现视频抽帧示例代码的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did124783