【OpenCV实战】视频转图像,视频抽帧,图像合成视频

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

前言:

在做深度学习目标检测项目中,有的时候需要自己制作图像数据集。一张张去拍图片是不太现实的做法。我们经常是先用相机拍取连续的视频,然后再将视频切成若干图片。下面就是我切分后的效果:
在这里插入图片描述

这篇文章主要来教大家如何实现视频与图像之间的互转。

一、视频转图像

由于连续视频相邻帧的图像相似度很高,这对于数据集来说并不是一件好的事情,所以可以隔帧取图像。在下面的示例中,我就是每隔10帧取一次。

Python 代码如下:

import cv2

def video2images(Video_Dir):
    """
    function: video to pictures
    author: AIJun
    date:2021/3/17
    """
    cap = cv2.VideoCapture(Video_Dir)
    c = 1  # 帧数起点
    index = 1  # 图片命名起点,如1.jpg

    if not cap.isOpened():
        print("Cannot open camera")
        exit()

    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("Can't receive frame (stream end?). Exiting ...")
            break
        if c % 10 == 0:
            cv2.imwrite('pictures/' + str(index) + '.jpg', frame)
            index += 1
        c += 1
        cv2.waitKey(1)
        # 按键停止
        if cv2.waitKey(1) == ord('q'):
            break
    cap.release()

Video_Dir = "D:\数据集\data3_16\WIN_20210316_17_46_54_Pro.mp4"
video2images(Video_Dir)

二、图像合成视频

下面展示了,将连续的图片合成一条视频,视频的帧率为24。Python代码如下:

import glob
import os
import cv2

def images2video(image_dir, save_name):
    fps = 24
    fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
    video_w = cv2.VideoWriter(save_name, fourcc, fps, (1920, 1080))
    # 扫描文件夹中所有jpg文件
    images = glob.glob(os.path.join(image_dir, "*.jpg"))
    for i in range(1, len(images)):
    	# 选中名为"{}.jpg".format(1) = 1.jpg
        image_name = os.path.join(image_dir, "{}.jpg".format(i))
        frame = cv2.imread(image_name)
        video_w.write(frame)
    video_w.release()

image_dir = "D:\Project\VideoToImage\pictures"
save_name = "test.avi"
images2video(image_dir, save_name)

由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!

在这里插入图片描述
推荐文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI 菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值