使用opencv-python(cv2)如何将视频裁成图像?

在制作数据集时,首先将网上搜集到的视频裁成图像,可是如何去实现呢?

考虑到opencv-python中有此类方法,故此篇博客由此诞生。


注意,视频文件在笔者文件:D:\data\element (由于此数据集现处于研究阶段,尚未发布,且对于笔者特别重要,于是将其马赛克)
在这里插入图片描述产生新的数据集在笔者文件:D:\data\Video
在这里插入图片描述一个视频会裁成很多图片于是,生成的数据集细分为:

D:\data\Video\1
D:\data\Video\2
D:\data\Video\3
D:\data\Video\4
D:\data\Video\5
D:\data\Video\6
注意123456为视频的名字产生的文件夹

需要用到的知识点:

参考博客:cv2.VideoCapture()用法及举例

# 其中VideoCapture中的0是参数,代表电脑的内置摄像头,
# 如果有两个内置摄像头则为0,1,
# 也可以放我们需要的视频路径,比如我自己的 D:\data\element\1.mp4
1.cap = cv2.VideoCapture(0)

# cap.read()代表按帧独取视频, 
# 其中ret代表布尔值,读帧正确则返回True,返回False表示无数据后续break
# frame代表某帧的图像
2.ret,frame = cap.read()

# cv2.waitKey()代表等待键盘输入
# cv2.waitKey(1)代表延时1ms切换到下一帧图像
# cv2.waitKey(0)只显示当前帧的图像
3. cv2.waitKey(1)

# cap.release()释放摄像头
4. cap.release()

# 统计视频图片的数量
5. cap.get(cv2.CAP_PROP_FRAME_COUNT)

非cv2部分知识:

# 生成文件夹所用,如果不存在此文件夹就生成。
def makedir(name, phase):
    filedir = os.path.join(name, phase)
    if not os.path.exists(filedir):
        os.makedirs(filedir)
    return filedir

代码:

import cv2
import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

# D:\data\element
video_root = os.path.join(BASE_DIR, 'element')

# open the folder
video_dirs = os.listdir(video_root)


def makedir(name, phase):
    filedir = os.path.join(name, phase)
    if not os.path.exists(filedir):
        os.makedirs(filedir)
    return filedir


# Create a new folder to hold the new dataset
New_Folder = makedir(BASE_DIR, 'FireVideo')


def video_to_photo():
    # got all video files
    for index, video_file in enumerate(video_dirs):

        # got the video file root
        video_file = os.path.join(video_root, video_file)

        # read video
        cap = cv2.VideoCapture(video_file)

        # The number of videos cropped from the video
        count = 0
        Folder = makedir(New_Folder, str(index + 1))
        # frames
        fps = cap.get(cv2.CAP_PROP_FRAME_COUNT)
        # whether it is opened normally
        while cap.isOpened():
            ret, frame = cap.read()
            if frame is None:
                break
            if ret == True:
                count += 1
                if count < fps:
                    save_root = os.path.join(Folder, str(count) + '.jpg')
                    print("writing " + save_root + " ...")
                    cv2.imwrite(save_root, frame)
            cv2.waitKey(1)
    cap.release()


if __name__ == '__main__':
    video_to_photo()
    print("well done! ")

结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值