使用Python、OpenCV,ImageMagick工具箱制作GIF动画

2023-10-31

使用Python、OpenCV,ImageMagick工具箱制作GIF动画

这篇博客将介绍如何根据给定的源图片文件夹制作动画,Python负责根据给定文件夹获取所有图片文件,并根据图片名进行排序,实质上动画是调用ImageMagick的命令行生成的;

ImageMagick的安装可参考:使用Python,OpenCV创建动画GIF图

原始文件夹图片:
在这里插入图片描述在这里插入图片描述

效果图:

看起来后边的俩张图小是因为原始图片就分辨率不一致哈。原始图片一致的就没这问题了;
在这里插入图片描述

源码:

# USAGE
# python create_gif.py --config config.json --output out.gif

# 导入必要的包
from imutils import paths
import argparse
import json
import cv2
import os


def create_gif(inputPath, outputPath, delay, finalDelay, loop):
    # 获取输入路径的所有图像
    imagePaths = sorted(list(paths.list_images(inputPath)))

    # 移除list中的最后一个路径
    lastPath = imagePaths[-1]
    imagePaths = imagePaths[:-1]

    # 构建  ImageMagick命令行以生成输出的GIF,给一个足够大的时间延迟以得到最终输出动画
    cmd = "magick -delay {} {} -delay {} {} -loop {} {}".format(
        delay, " ".join(imagePaths), finalDelay, lastPath, loop,
        outputPath)
    print(cmd)
    os.system(cmd)


# 构建命令行参数并解析
# --config: JSON配置文件的路径
# --output: 输出gif的路径
ap = argparse.ArgumentParser()
ap.add_argument("-c", "--config", required=True,
                help="path to configuration file")
ap.add_argument("-o", "--output", required=True,
                help="path to output GIF")
args = vars(ap.parse_args())

# 加载config文件
config = json.loads(open(args["config"]).read())

# 所有图像的帧已写入临时文件夹中,制作GIF图
print("[INFO] creating GIF...")
# 调用 create_gif 函数来生成GIF动画文件,create_gif 函数是将参数传递给ImageMagick的convert的包装器工具以执行其命令行。
create_gif(config['temp_dir'], args["output"], config["delay"],
           config["final_delay"], config["loop"])

cv2.waitKey(0)
# 清理删除临时文件夹
print("[INFO] cleaning up...")
# shutil.rmtree(config["temp_dir"], ignore_errors=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python、OpenCV,ImageMagick工具箱制作GIF动画 的相关文章

随机推荐

  • linux统计一个文件中特定字符的个数

    统计一个文件中某个字符串的个数 其实就是在在一块沙地里面找石头 有的人看到石头以后 在上面做个标记 grep 然后记住自己做了多少个标记 有的 人看到石头以后 把它挖了 tr 最后统计自己挖了多少石头 有的人看到石头以后 把它跳过去 awk
  • STL:list的模拟实现(迭代器失效探讨)

    为什么重新设计list迭代器 对迭代器解引用 我们希望拿到的是指针所指向的值域 而直接解引用拿到的是指针所指向的节点 对list指针 和 迭代器 提供一种方法 使其能够按照顺序访问容器 聚合物 所含的各个元素 并且不用暴露容器内部的表述方式
  • 达芬奇15中文版

    教程 1 下载解压 得到davinci resolve 15原程序和文件 2 双击文件 DaVinci Resolve Studio 15 0b2 Windows exe 依提示安装原程序 3 达芬奇软件需要安装必要的组件 一般按默认安装即
  • Flexible弹性布局

    flex布局 弹性布局 flex的两个重要概念 开启了flex布局的元素叫flex container display flex inline flex flex container 里面的直接子元素叫做 flex items flex布局
  • 来源查询检索的研究

    来源查询检索的研究 来源查询的方式主要有 基于内容索引的查询 gt 基于时间局部性的上下文增强搜索查询 gt 基于因果关系的查询 根据provenance提供上下文有关的索引 即因果关系 1 传统的来源查询检索方式为基于内容索引的查询 在这
  • 阿里云视频点播文件上传-iOS

    文章目录 阿里云视频点播文件上传 iOS 一 上传方式 方式一 上传地址加凭证上传 1 请求AppServer 2 在start的回调中设置上传地址和上传凭证 3 uploadAuth过期重新设置 4 上传图片和上传视频 方式二 STS方式
  • 记一次线上CPU持续飙升的问题排查

    最近公司的事务多了很多 都很少有时间来更新了 上周六项目上刚刚发生了一次CPU持续飙高 导致服务不可用的线上事故 在此也简单做下记录 问题排查的过程大概是这样的 查看业务日志中最开始报错的信息 发现数据库连接超时 redis也连接超时 而且
  • 嵌入式实践——烟雾产生器

    开发工具 Altium Designer 2020 STM32CubeMX 5 3 0 MDK ARM 5 28 1 设计需求 设计出一套完整的烟雾产生装置 该装置通过按钮来控制烟雾的产生和关闭 装置对体积要求较高 所以控制板需控制在4cm
  • WPF 文本框错误验证 Validation.ErrorTemplate

    前端 1 错误模板ValidationContent xaml
  • 智能算法系列之粒子群优化算法

    本博客封面由ChatGPT DALL E 2共同创作而成 文章目录 前言 1 算法思想 2 细节梳理 2 1 超参数的选择 2 2 一些trick 3 算法实现 3 1 问题场景 3 2 python实现 代码仓库 IALib GitHub
  • CTF做题总结(二)

    前言 最近这段时间在内部平台上做了一些Web题 和最基础的Reverse签到题 虽说还有两道Reverse题没做出来 但还是先总结一下吧 Web1 BASE INJECT 看题目提示 就知道这道题之前做过 不过当时没总结 现在总结一下 题目
  • Latent Diffusion(CVPR2022 oral)-论文阅读

    文章目录 摘要 背景 算法 3 1 Perceptual Image Compression 3 2 Latent Diffusion Models 3 3 Conditioning Mechanisms 实验 4 1 On Percept
  • sql中in查不出数据怎么办?

    在写代码的时候突然想到一个问题 用in关键字查不出来东西怎么办 sql报错怎么办 我在生产环境中用了如下的代码 select from cons account where id in select cons id from meter w
  • img 转化成iso镜像的办法

    最近在使用KVM启用虚拟机 然后将里面的环境和配置 配置成我们公司需要的环境 再打包成iso镜像 之后再次生成新的虚拟机 但是KVM启动出的镜像生成的是img镜像 需要将img镜像转换成iso镜像 网上找了好多 比如imgtoiso 这个软
  • python 调用js的四种方式

    1 前言 日常 Web 端爬虫过程中 经常会遇到参数被加密的场景 因此 我们需要分析网页源代码 通过调式 一层层剥离出关键的 JS 代码 使用 Python 去执行这段代码 得出参数加密前后的 Python 实现 本文将聊聊利用 Pytho
  • RabbitMQ和kafka的区别

    1 应用场景方面 RabbitMQ 用于实时的 对可靠性要求较高的消息传递上 kafka 用于处于活跃的流式数据 大数据量的数据处理上 2 架构模型方面 producer broker consumer RabbitMQ 以broker为中
  • LVGL移植教程

    LVGL是一个商业开源的UI库 内存占用量最少只需要 16K UI效果动画等也十分丰富 因此凭借这低内存消耗 控件主题等丰富的特点发展也是比较快的 目前LVGL的迭代更新对API接口改动还是比较大的 此文档针对 LVGL8 1 1版本进行说
  • std::move失效问题

    一 问题 在C 中 std move是一个用于将对象转移所有权的函数模板 它将对象的状态从一个对象转移到另一个对象 通常用于优化移动语义 那std move什么情况下会失效呢 有这样一个代码需求 在lambda中 将一个捕获参数move给另
  • 对字典中的key迭代修改并dump到yaml文件中

    目录 1 解决迭代修改key的报错问题 2 将字典存入yaml文件中 本次工作的内容是将yaml文件中的key值进行修改并存入新的yaml文件 1 解决迭代修改key的报错问题 字典中的key是不能通过循环修改的 会报错 RuntimeEr
  • 使用Python、OpenCV,ImageMagick工具箱制作GIF动画

    使用Python OpenCV ImageMagick工具箱制作GIF动画 这篇博客将介绍如何根据给定的源图片文件夹制作动画 Python负责根据给定文件夹获取所有图片文件 并根据图片名进行排序 实质上动画是调用ImageMagick的命令