python生成九宫格图片

python生成九宫格个图片效果如下:
在这里插入图片描述
完整代码:

# -*- coding: UTF-8 -*-
"""
九宫格图片生成
"""
import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 读取图片
im = Image.open('../images/girl1.jpg')

print(im.size)
# 宽高各除以3,获取裁剪后的单张图片大小
src_w = im.size[0]
src_h = im.size[1]
width = src_w / 3
height = src_h / 3

# 裁剪图片的左上角坐标
start_x = 0
start_y = 0

# 用于给图片命名
im_name = 1
sub_images = []
# 循环裁剪图片
for i in range(3):
    for j in range(3):
        crop = im.crop((start_x, start_y, start_x + width, start_y + height))
        crop.save(str(im_name) + '.jpg')
        sub_images.append(crop)
        # 将左上角坐标的 x 轴向右移动
        start_x += width
        im_name += 1
    # 当第一行裁剪完后 x 继续从 0 开始裁剪
    start_x = 0
    # 裁剪第二行
    start_y += height

# 效果测试
num = 330
for i in range(9):
    num = num + 1
    plt.subplot(int(num)), plt.imshow(sub_images[i]), plt.axis('off')
plt.show()

# 合并成单张大图
internal = 5
big_image = np.ones([src_h + internal*2, src_w + internal*2, 3], dtype='uint8')*255
n = 0
start_x = 0
start_y = 0
for i in range(3):
    for j in range(3):
        print('image i: ', n)
        sub_im = np.array(sub_images[n])
        sub_h, sub_w = np.shape(sub_im)[0:2]
        big_image[int(start_y):int(start_y+sub_h), int(start_x):int(start_x+sub_w), :] = sub_im
        n += 1
        start_x += width + internal
    start_x = 0
    # 裁剪第二行
    start_y += height + internal

plt.imshow(big_image), plt.axis('off')
plt.show()

big_image = cv2.cvtColor(big_image, cv2.COLOR_BGR2RGB)
cv2.imwrite("big_image_nine.jpg", big_image)

猜你喜欢

转载自blog.csdn.net/qq_44924694/article/details/131251902