1、数据集简述:

       虽然有主流庞大的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 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文件后结果框显示的内容:

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

抽帧得到的图片示例:

 

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

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

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