将多张缩略图拼成一幅大图

将多张缩略图拼成一幅大图

数据为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

结果:


14657665-0075f50c9c96ff9a.png
result1.png

14657665-0620035c53f5db17.png
result2.png

参考资料:《python科学计算》

发布了82 篇原创文章 · 获赞 39 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_28368377/article/details/104649139
今日推荐