【转载】每天进步一点点——在Windows平台下使用OpenCV将图片合成视频

举报
Tianyi_Li 发表于 2020/05/21 17:15:02 2020/05/21
【摘要】 在Windows平台下使用OpenCV将图片合成视频, 输入为图片存放的文件夹路径即可。支持设置视频编码格式,宽度,高度,帧数,以及是否简单的翻转图片。

原因:

       因为某些原因,需要将处理完成的图片合成视频,大概3000张图片吧,开始想用现成的软件但没找到,干脆用OpenCV自己合成吧,初次尝试以失败告终,终于在看了N篇博客后,找到了一位大佬(Chen Yongfu)的代码(时间有点久,忘了在哪看到的了,所以暂没有给链接)。

环境:

Windows平台(Linux下没有测试过,可能也行,毕竟OpenCV是跨平台的,应该跟平台关系不大)

Opencv-Python版本  4.2.0.32

输入:

       输入为图片存放的文件夹路径即可。通过搜过输入文件夹下图片后缀,比如“.jpg”来加载图片,写入视频,支持设置视频编码格式,宽度,高度,帧数,以及是否简单的翻转图片。

代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Oct 17 20:09:07 2019

@author: Chen Yongfu
"""
import os
import cv2
import time


# 图片合成视频
def picvideo(path, size=(1920,1080), extension = '.jpg', fps=20, fcc='MJPG', isFlip = False, flipType=-1):
    '''
    本函数为读取图片生成视频的
    需要保证图片为同格式,同尺寸,相同格式意味着要编码一致
    path, 图像路径
    size, 视频生成尺寸
    fps, 幀速
    fcc, 编码格式
        视频编码参考:
        I420,无损压缩
        MJPG DIVX XVID
        CV_FOURCC('P','I','M','1') = MPEG-1 codec
        CV_FOURCC('M','J','P','G') = motion-jpeg codec
        CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
        CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
        CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
        CV_FOURCC('U', '2', '6', '3') = H263 codec
        CV_FOURCC('I', '2', '6', '3') = H263I codec
        CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
        https://www.cnblogs.com/Akagi201/archive/2012/04/03/2430772.html
    isFlip
    flipCode,翻转模式:0 垂直翻转;1 水平翻转; -1 水平垂直翻转
    '''
    filelist = os.listdir(path) #获取该目录下的所有文件名
    # 导出路径
    file_path = path + '\\video_' + str(int(time.time())) + ".avi"
    # 不同视频编码对应不同视频格式和大小,压缩率
    fourcc = cv2.VideoWriter_fourcc(*fcc)
    video = cv2.VideoWriter(file_path, fourcc, fps, size )

    for item in filelist:
        if item.endswith(extension):    # 判断图片后缀
            item = path + '/' + item
            img = cv2.imread(item)
            img = cv2.resize(img, size)
            if isFlip:
                img = cv2.flip(img, flipType)
            cv2.imshow('video', img)
            cv2.waitKey(1)
            video.write(img)    # 把图片写进视频

    video.release() # 释放
    cv2.waitKey(1)&0xFF
    cv2.destroyAllWindows()

if __name__ == '__main__':
        picvideo(r'C:\Users\lenpveo\Downloads\train', (1280, 720))

注意要写你的路径,如果是linux下,路径格式可能不同,可自行搜索。

picvideo(r'你的路径', (1280, 720))

在合成视频的同时,会打开窗口显示视频,所以需要支持OpenCV开窗口才行,一般电脑都支持的,但在云服务中一般不支持,需要自己调整,删除开窗口代码即可。赶快运行试一下吧。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。