Matlab以及Python多图拼接
本文提供了多张图片进行拼接的matlab以及python代码供参考使用
Matlab图片拼接
clear;clc
% 图片文件名列表
get_date = datestr(datetime('now'),'YYYYmmdd');
%get_date = '20230523'
yearx = str2num(get_date(1:4));
monx = str2num(get_date(5:6));
dayx = str2num(get_date(7:8));
fpath = ['D:\tmp\中央气象台-降水预报\', num2str(yearx), '\', num2str(monx, '%02d'),num2str(dayx,'%02d'),'\'];
spath = ['./'];
file1 = [fpath, get_date, '-day1.JPG'];
file2 = [fpath, get_date, '-day2.JPG'];
file3 = [fpath, get_date, '-day3.JPG'];
fileNames = {file1, file2, file3};
% 存储图片数据的单元数组
images = cell(1, numel(fileNames));
% 读取每张图片
for i = 1:numel(fileNames)
images{i} = imread(fileNames{i});
end
% 计算输出图片的尺寸和间距
imageHeight = size(images{1}, 1);
imageWidth = size(images{1}, 2);
spacing = 150; % 设置间距大小
spacingColor = [255 255 255]; % 设置间距颜色为白色
% 计算输出图片的尺寸
outputHeight = numel(fileNames) * (imageHeight + spacing) - spacing;
outputWidth = imageWidth;
% 创建输出图片
outputImage = uint8(zeros(outputHeight, outputWidth, 3));
% outputImage(:) = spacingColor; % 将输出图片的所有像素设置为间距颜色
% 拼接图片
yOffset = 0;
for i = 1:numel(fileNames)
image = images{i};
imageHeight = size(image, 1);
outputImage(yOffset + 1:yOffset + imageHeight, :, :) = image;
if i<numel(fileNames)
outputImage(yOffset + imageHeight+1:i* (imageHeight + spacing), :, :) = ones(spacing, imageWidth, 3) * 255;
end
yOffset = yOffset + imageHeight + spacing; % 调整垂直位置和间距
end
% imshow(outputImage)
% 输出拼接后的图片
if ~exist(spath), mkdir(spath), end
imwrite(outputImage, [spath, get_date, '.png']);
拼接结果
Python图片拼接
import os
import datetime
from PIL import Image
def map_concate(file_lst, save_path, save_name, spacing=30, mode="column"):
# 打开三张图片
image1 = Image.open(file_lst[0])
image2 = Image.open(file_lst[1])
image3 = Image.open(file_lst[2])
# 获取每张图片的宽度和高度
width, height = image1.size
# 设置间距大小(像素)
spacing = spacing
# 计算输出图片的尺寸
output_height = height * 3 + spacing * 2
output_width = width
output_image = Image.new('RGB', (output_width, output_height), (255, 255, 255))
if mode == "column":
# 计算每张图片在输出图片中的位置
y_offset = 0
output_image.paste(image1, (0, y_offset))
y_offset += height + spacing
output_image.paste(image2, (0, y_offset))
y_offset += height + spacing
output_image.paste(image3, (0, y_offset))
elif mode == "row":
# 计算每张图片在输出图片中的位置
x_offset = 0
output_image.paste(image1, (x_offset, 0))
x_offset += width + spacing
output_image.paste(image2, (x_offset, 0))
x_offset += width + spacing
output_image.paste(image3, (x_offset, 0))
if not os.path.exists(save_path):
os.makedirs(save_path)
# 保存拼接后的图片
output_image.save(os.path.join(save_path, save_name))
if __name__ == "__main__":
fpath = "D:/tmp/中央气象台-降水预报/"
time_tick = datetime.datetime.now().strftime("%Y%m%d")
year = time_tick[0:4]
mon = time_tick[4:6]
day = time_tick[6:8]
pic_path = os.path.join(fpath + year, mon + day)
save_path = fpath + year + '-concate'
save_name = time_tick + ".JPG"
name_list = [time_tick+"-day"+str(i)+".JPG" for i in range(1,4)]
file_list = [os.path.join(pic_path, name) for name in name_list]
# print(file_list)
map_concate(file_list, save_path, save_name, mode="row")
拼接结果