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

使用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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用PythonOpenCV进行数字识别可以分为以下几个步骤: 1. 安装OpenCV库:首先,确保已经安装了PythonOpenCV库。可以使用pip命令安装OpenCV:`pip install opencv-python`。 2. 导入库:在Python脚本中,导入所需的库: ```python import cv2 import numpy as np ``` 3. 加载并预处理图像:使用OpenCV加载图像,并对其进行预处理。通常,数字识别需要在灰度图像上进行。可以使用以下代码加载图像并将其转换为灰度图像: ```python image = cv2.imread('image.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ``` 4. 对图像进行阈值处理:为了将数字从背景中分离出来,可以使用阈值处理。这将使图像变为黑白二值图像。可以使用以下代码进行简单的阈值处理: ```python _, threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) ``` 5. 查找轮廓:使用OpenCV的`findContours`函数查找图像中的轮廓。可以使用以下代码查找轮廓: ```python contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 6. 遍历轮廓并识别数字:对于每个轮廓,可以计算其边界框并提取数字区域。然后,使用所选的机器学习算法(例如SVM或神经网络)对数字进行识别。这超出了本文的范围,但可以通过训练模型来实现数字识别。 ```python for contour in contours: (x, y, w, h) = cv2.boundingRect(contour) digit = gray[y:y+h, x:x+w] # 使用机器学习算法识别数字 # ... ``` 这只是一个基本的数字识别框架,你可以根据具体需求进行调整和改进。记得导入模型和训练模型来实现数字识别。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值