Matlab以及Python多图拼接

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")

拼接结果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值