使用OpenCV和Imutils构建图像的蒙太奇效果

使用OpenCV和Imutils包构建图像的蒙太奇效果

这篇博客将演示如何使用OpenCV和Python构建蒙太奇,以可视化一系列图像。

1. 效果图

montages = build_montages(images, (110, 140), (5, 3))

如下图设置蒙太奇图像 5行3列,每张小图宽度110像素,高度140像素;总共35张图,故生成3个蒙版图,第3张图像只有5张图像.
在这里插入图片描述

2. 原理

构建蒙太奇的方法:

montages = build_montages(images, (110, 140), (5, 3))

表示,构建每张图片110*140像素,5行3列的蒙太奇图像组

1)入参

  • images:图像列表;
  • 元组1:图像大小;
  • 元组2:蒙太奇shape

2)返回值

  • 以Numpy数组格式返回蒙太奇图像列表;如果图像中有更多图像,则额外图像创建新的蒙太奇。重复此过程,直到所有图像已被添加到蒙太奇,缺失的填充黑色像素;

当样本图像数据量多于蒙太奇每张图像需要的个数时,会迭代生成多个蒙太奇图像,最后一张蒙太奇图像不足的图用黑色像素填充;

3. 源代码

# 构建蒙太奇效果
# USAGE
# python montage_example.py --images E:\personal\images --sample 35

# 导入必要的包
from imutils import build_montages
from imutils import paths
import argparse
import random
import cv2

# 构建命令行参数及解析
# --images 必须,构建蒙太奇的原始图像路径
# --sample 可选,指定要示例的样本图像个数,默认21
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True,
                help="path to input directory of images")
ap.add_argument("-s", "--sample", type=int, default=21,
                help="# of images to sample")
args = vars(ap.parse_args())

# 获取图像路径,然后随机获取一组示例
imagePaths = list(paths.list_images(args["images"]))
# 随机洗牌
random.shuffle(imagePaths)
imagePaths = imagePaths[:args["sample"]]

# 初始化图像列表
images = []
# 遍历图像路径
for imagePath in imagePaths:
    # 加载图像,更新图像列表
    image = cv2.imread(imagePath)
    images.append(image)
# 构建蒙太奇效果,每张图片110*140像素,5行3列
# 入参images:图像列表; 元组1:图像大小; 元组2:蒙太奇shape
# 返回值:以Numpy数组格式返回蒙太奇图像列表;如果图像中有更多图像,则额外图像创建新的蒙太奇。重复此过程,直到所有图像已被添加到蒙太奇,缺失的填充黑色像素;
montages = build_montages(images, (110, 140), (5, 3))

# 遍历蒙太奇组图像,并展示
for i, montage in enumerate(montages):
    cv2.imshow("Montage" + str(i), montage)
    cv2.waitKey(0)

参考

猜你喜欢

转载自blog.csdn.net/qq_40985985/article/details/115136756