Python自定义批量合并拼接图像、批量裁剪图像 - Go语言中文社区

Python自定义批量合并拼接图像、批量裁剪图像


一、批量合并拼接图像

笔者在工作的时候,往往可视化很多算法结果,但是做分析的时候就有点头疼,超级多图,可能要两两比较或者几几比较,一张张翻图并不是最优的方式。根据所需拼接图片,然后再分析是一个很高效的事儿。于是基于Python3,就有了如下的代码,可以加一层GUI代码封装成.exe应用,但是对于我来说就没有必要了。大家可以随意尝试。

# -*- coding:utf-8 -*-

"""
图片任意拼接,参数化形式代码
使用指南:
    1. 修改常量的数值,可以实现不同样子的图片拼接,例如拼接成5*20,或者100*200的大图,每张小图也可以控制大小
    2. 可以自定义函数让图片不仅仅是全部拼接成一张图,也可以自定义哪些图进行拼接。
"""

import PIL.Image as Image
import os

IMAGES_PATH = "play/"  # 图片集地址
IMAGES_FORMAT = ['.jpg', '.JPG']  # 图片格式
IMAGE_SIZE = 1080  # 图片大小
IMAGE_ROW = 10  # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 5  # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_SAVE_PATH = 'toImage_0.jpg'  # 图片转换后的地址

# 获取图片集地址下的所有图片名称
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
               os.path.splitext(name)[1] == item]

# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
    raise ValueError("合成图片的参数和要求的数量不能匹配!")


# 图像拼接
def image_compose():
    # 打开一个新的图
    to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE))
    # 循环遍历,把每张图按顺序粘贴到对应位置上
    for y in range(1, IMAGE_ROW + 1):
        for x in range(1, IMAGE_COLUMN + 1):
            from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
                (IMAGE_SIZE, IMAGE_SIZE),
                Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
    # 保存新图
    return to_image.save(IMAGE_SAVE_PATH)


image_compose()

结果是(笔者参加2018ARM人工智能开发者全球峰会时的所有参会照片记录):在这里插入图片描述

二、批量裁剪图像
from PIL import Image
import os

# 定义待批量裁剪的图像地址
IMAGE_INPUT_PATH = '../app/static/data/raw_images'
# 定义裁剪后的图像存放地址
IMAGE_OUTPUT_PATH = '../app/static/data/crop_images'
# 定义左,上,右和下像素坐标
BOX_LEFT, BOX_UP, BOX_RIGHT, BOX_DOWN = 186, 186, 1350, 1330

for each_image in os.listdir(IMAGE_INPUT_PATH):
    # 每个图像全路径
    image_input_fullname = IMAGE_INPUT_PATH + '/' + each_image
    # PIL库打开每一张图
    img = Image.open(image_input_fullname)

    # 从此图像返回一个矩形区域。 盒子是一个4元组定义左,上,右和下像素坐标。
    box = (BOX_LEFT, BOX_UP, BOX_RIGHT, BOX_DOWN)
    # 进行ROI裁剪
    roi_area = img.crop(box)
    # 裁剪后每个图像全路径
    image_output_fullname = IMAGE_OUTPUT_PATH + '/' + each_image
    # 保存处理后的图像
    roi_area.save(image_output_fullname)
    print('{0} crop Done.'.format(each_image))

示例就不必了,裁剪图像嘛。根据这段代码就可以批量按照一定的标准去批量裁图像了。注意里面的box元祖,可以尝试不同的值试试看。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Tong_T/article/details/83057401
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢