将多张缩略图拼成一幅大图
2020-03-03 本文已影响0人
陨星落云
将多张缩略图拼成一幅大图
数据为30张缩略图,每张图像相同大小(90,160,3)。
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 3 18:48:01 2020
@author: 陨星落云
"""
import glob
import numpy as np
import cv2
imgs = []
for img in glob.glob("thumbnails/*.png"):
imgs.append(cv2.imread(img))
print("缩略图的高、宽和通道数:",imgs[0].shape)
# 调用concatenate()将这些数组沿第 0 轴拼成一个大数组
img1 = np.concatenate(imgs,0)
print(img1.shape)
# print(img1)
# 方法1
# 拼成一幅6行5列的缩略图,将img1的第0轴分解为3个轴,长度分别为(6,5,90)。
img2 = img1.reshape(6,5,90,160,3)
print(img2.shape)
# 使用 img2[i,j]可以获取第 i 行、第 j 列上的图像
print(img2[0,1].shape)
# 根据目标图像的大小,可以算出目标数组的形状为(540,800,3),即(6*90,5*160,3),也可以把它看作形状为(6,90,5,160,3)的多维数组。
# 利用swapaxes()交换1,2轴,得到(6,90,5,160,3);并重新设置形状(540,800,3)
img3 = img2.swapaxes(1,2).reshape(540,800,3)
# 方法2
# 复制img2
img4 = np.copy(img2)
# 设置mask,制作蓝色色边界
mask = np.ones(img4.shape[:-1],dtype=bool)
mask[:,:,2:-2,2:-2] = False
# 将边框设置为天蓝色
img4[mask] = (255,250,87)
# 利用transpose()交换1,2轴,得到(6,90,5,160,3);并重新设置形状(540,800,3)
img5 = img4.transpose(0,2,1,3,4).reshape(540,800,3)
# 显示图像并保存图像
cv2.imshow("result1", img3)
cv2.imshow("result2", img5)
cv2.imwrite("result1.png", img3)
cv2.imwrite("result2.png", img5)
cv2.waitKey(0)
cv2.destroyAllWindows
结果:
result1.png
result2.png
参考资料:《python科学计算》