Python 将图片合成视频

本文记录使用opencv-python库将以数字命名的图片合成视频的程序:

import os

from PIL import Image
import cv2


def charts2video(img_path, video_path):
    """将给定目录下的图片转成视频

    Args:
        img_path: 图片路径
        video_path: 输出视频的路径和名称

    Returns: 图片转成的视频
    来源: 参考博客https://www.cnblogs.com/willwuss/p/12695963.html
    """
    images = os.listdir(img_path)
    images.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序  
    fps = 6  # 帧数
    fourcc = cv2.VideoWriter_fourcc(*"MJPG")

    im = Image.open(img_path + images[0])
    video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size)
    for img_i in images:
        frame = cv2.imread(img_path + img_i)
        print('开始将 ' + img_i + ' 加入视频\n')
        video_writer.write(frame)  # 注意:图片尺寸必须和视频尺寸一样,不然不会被加入视频中!!!
    video_writer.release()

只需要输入图片路径(例如,imgPath = “./figures/”)和视频路径与名称(如,videoPath = “./test.avi”)就可以调用上面的程序将图片连接成视频。需要注意的是图片尺寸需要一致,不然会跳过尺寸不一致的图片。先下面的程序可以更改图片尺寸

import os
import os.path
from PIL import Image
from typing import Tuple


def resize_image(img_in: str, img_out: str, img_size: Tuple[int, int], save_format: str) -> None:
    """
    判断图片尺寸,与给定尺寸不一致更改为指定尺寸,与给定尺寸一致时不进行操作。

    Args:
        img_in (str): 输入图片路径和名称
        img_out (str):  输出图片路径和名称
        img_size (tuple[int, int]): 输出图片像素宽度和像素高度
        save_format (str): 输出图片类型(png, gif, jpeg...)

    Returns:
        None: 无返回值,程序操作了文件
    """
    img = Image.open(img_in)

    img_size_init = img.size
    if img_size_init != img_size:    # 判断图片尺寸是否需要修改
        print(f'图片{img_in}初始尺寸为{img_size_init},被更改为{img_size}\n')
        out = img.resize(img_size, Image.ANTIALIAS)  # resize image with high-quality
        out.save(img_out, save_format)

    return None


def resize_img_in_dir(img_path, output_path, img_size, save_format):
    """
    更改文件夹中图片的尺寸,以相同的名称存到给定文件夹

    Args:
        img_path: 输入图片路径
        output_path: 输出图片路径
        img_size: 输出图片宽度和高度
        save_format: 输出图片类型(png, gif, jpeg...)
    """
    images = os.listdir(img_path)  # 获取文件夹中所有图片的名称
    images.sort(key=lambda x: int(x[:-4]))  # 以名称字符串的数字从小到大排序 

    # 修改图片尺寸
    for img_i in images:
        resize_image(img_path+img_i, output_path+img_i, img_size, save_format)

    return None
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

oPengLuo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值