將多張縮略圖拼成一幅大圖
數據為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科學計算》