不同文件夹图片拼接

#导入相应的包
import numpy as np
import os
import matplotlib.image as mp
from skimage import img_as_ubyte
from PIL import Image

#本地图片存放的地址
jpg_path1 = "E:\\BaiduNetdiskDownload\\dataset"
jpg_path2 = "E:\\BaiduNetdiskDownload\\dataset\\rn\\"

#新建文件夹来处理拼接后的新图片
#os.makedirs(" E:\\BaiduNetdiskDownload\\合并后\\")

#拼接处理后的图片保存地址
savepath = r"E:\BaiduNetdiskDownload\dataset\pinjie"

filelist1 = os.listdir(jpg_path1) #打开对应的文件夹
filelist2 = os.listdir(jpg_path2)

total_num = len(filelist1)#得到文件夹中图像的总个数

for i in range(total_num):
    jpg1 = jpg_path1 +'norain'+'-'+ str(i + 1) + '.png' #拼接图像的读取地址
    jpg2 = jpg_path2 +'norain'+ '-'+ str(i + 1) + '.png'

    #对图像数据类型转换
    image1 = mp.imread(jpg1)
    image2 = mp.imread(jpg2)
    image1 = img_as_ubyte(image1)
    image2 = img_as_ubyte(image2)
    result_img1 = Image.fromarray(image1)
    result_img2 = Image.fromarray(image2)

    img1 = np.array(result_img1)  # 转换为多维数组对象
    img2 = np.array(result_img2)
    im3 = np.concatenate((img1, img2), axis=1)  # 对图片进行横向拼接
    # 生成图片
    result_picture = Image.fromarray(im3)
    savepicture_name = savepath + str(i+1) + '.png'  #字符串拼接保存图像的地址
    result_picture.save(savepicture_name)  #保存图像

### 实现Matlab中对子文件夹图片进行批量拼接 为了实现这一功能,首先需要读取指定路径下的所有子文件夹,并从中提取所有的图像文件。接着,遍历这些图像并将其按照一定的顺序或方式拼接起来。 #### 读取子文件夹中的所有图像 利用`dir()`函数不仅能够获取当前文件夹的信息,还可以通过通配符来匹配特定类型的文件,比如`.jpg`格式的图像文件。对于包含层嵌套子文件夹的情况,则可以通过递归调用来深入每一个层次,直到找到最底层的文件为止[^1]。 ```matlab function allImages = getAllImagesFromSubfolders(rootPath) % 获取根目录下的一级子文件夹列表 subFolders = dir(fullfile(rootPath, '*')); allImages = {}; for k = 1 : length(subFolders) thisFolderName = fullfile(rootPath, subFolders(k).name); if isfolder(thisFolderName) && ~strcmp(subFolders(k).name,'.') && ~strcmp(subFolders(k).name,'..') % 对于每个子文件夹,查找其中的所有.jpg文件 imagesInThisFolder = dir(fullfile(thisFolderName, '*.jpg')); for m = 1:length(imagesInThisFolder) fullPathImage = fullfile(thisFolderName,imagesInThisFolder(m).name); img = imread(fullPathImage); % 将读取到的图像加入集合 allImages{end+1} = img; end % 如果该子文件夹还有自己的子文件夹,则继续向下一层迭代 deeperImages = getAllImagesFromSubfolders(thisFolderName); allImages(end+(1:length(deeperImages))) = deeperImages; end end end ``` 上述代码定义了一个名为`getAllImagesFromSubfolders`的函数,用于收集指定根路径(`rootPath`)下所有子文件夹里的JPEG格式图像。这里采用了递归来处理可能存在的层次子文件夹结构[^2]。 #### 批量拼接图像 当已经获得了所有要拼接的图像之后,可以根据需求选择水平方向还是垂直方向来进行拼接操作。假设现在想要创建一个新的大图,它由个小图横向排列组成: ```matlab % 假设allImages是一个包含了所有待拼接图像的单元数组 numOfImages = length(allImages); if numOfImages == 0 error('No images found to stitch'); elseif numOfImages == 1 finalImage = allImages{1}; else % 计算最终宽度和高度 [~,height,width,~] = size(allImages{1}); totalWidth = width * numOfImages; maxHeight = height; % 创建空白画布准备放置拼接后的结果 finalImage = zeros(maxHeight,totalWidth,class(allImages{1})); currentXPosition = 1; for idx = 1:numOfImages singleImg = allImages{idx}; % 插入单个图像至相应位置 finalImage(:,currentXPosition:(currentXPosition + width - 1),:) = singleImg; % 更新下一个插入点的位置 currentXPosition = currentXPosition + width; end end imshow(finalImage); % 显示拼接好的图像 imwrite(finalImage,'stitched_image.jpg'); % 可选:保存拼接后的图像为文件 ``` 这段脚本实现了将之前获得的所有图像按照行的方式依次排列成一幅更大的合成图像,并展示了这幅新生成的大图。如果希望改为列向拼接只需调整一些参数即可[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值