【科研】测试速通:python不同文件夹下同名图像拼接

论文必备图像拼接笔记

速通结果: 

现有:测试样本相同(名命相同),测试模型不同,测试结果分别保存至不同文件夹

目标:结果显示在同一张图像上

目录

论文必备图像拼接笔记

1.如果图像格式不一致,优先统一格式,此处为 jpg 转 png

2.如果名命复杂,先做批量名命处理

 3.简单明了的拼接方式


1.如果图像格式不一致,优先统一格式,此处为 jpg 转 png

import cv2
import os
 
print('----------------------------------------------------')
print('程序的功能为:将该目录下输入的文件内的图片转为指定格式')#jpg转化为png和png转化为jpg。
print('转化结果保存在当前目录下的new_picture内')
print('----------------------------------------------------')
 
son = "input copy"       #输入文件夹
picture_type = 'png'     #期望转换成png格式
daddir= './'
path = daddir + son
 
newpath = "new_picture"  #输出文件夹
if not os.path.exists(newpath):
    os.mkdir(newpath)
 
path_list=os.listdir(path)
number=0                        #统计图片数量
for filename in path_list:
    number+=1
    portion = os.path.splitext(filename)
    print('convert  ' + filename +'  to '+portion[0]+'.'+picture_type)
    img = cv2.imread(path+"/"+filename)
    cv2.imwrite("./"+newpath+"/"+portion[0]+'.'+picture_type,img)
print("共转化了%d张图片"%number)
print('转换完毕,文件存入 '+newpath+' 中')
cv2.waitKey(0)
cv2.destroyAllWindows()

2.如果名命复杂,先做批量名命处理

  • 这种的只能处理 一个文件夹的 图片名字, 有待改进;
  • 可进一步尝试循环文件夹。
import os

def rename(path):
    filelist = os.listdir(path)   # 获取指定的文件夹包含的文件或文件夹的名字的列表
    print(filelist)
    total_num = len(filelist)     #获取文件夹内所有文件个数
    
    i = 0                         # 图片名字从 0 开始
    c = 0
    for item in filelist: # 遍历这个文件夹下的文件,即 图片
        if item.endswith('png'):
            src = os.path.join(os.path.abspath(path), item)
            dst = os.path.join(os.path.abspath(path),str(i) + '.png')
            
            try:
                os.rename(src, dst)
                print ('converting %s to %s ...' % (src, dst))
                i = i + 1
                c = c + 1
            except:
                continue
    print('total %d to rename & converted %d pngs' % (total_num, i))
    print('total %d to rename & converted %d pngs' % (total_num, c))   

if __name__ == '__main__':
    path = "new_picture/"
    rename(path)

 3.简单明了的拼接方式

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

#本地图片存放的地址
jpg_path0 = "new_picture/"
jpg_path1 = "results_model1/"
jpg_path2 = "results_model2/"
jpg_path3 = "results_model3/"
jpg_path4 = "results_model4/"

#拼接处理后的图片保存地址
savepath = "result_visual/"
filelist0 = os.listdir(jpg_path0)
filelist1 = os.listdir(jpg_path1) #打开对应的文件夹
filelist2 = os.listdir(jpg_path2)
filelist3 = os.listdir(jpg_path3)
filelist4 = os.listdir(jpg_path4)

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

for i in range(total_num):
    jpg0 = jpg_path0 + str(i) + '.png'
    jpg1 = jpg_path1 + str(i) + '.png' #拼接图像的读取地址
    jpg2 = jpg_path2 + str(i) + '.png'
    jpg3 = jpg_path3 + str(i) + '.png'
    jpg4 = jpg_path4 + str(i) + '.png'

    #对图像数据类型转换
    image0 = mp.imread(jpg0)
    image1 = mp.imread(jpg1)
    image2 = mp.imread(jpg2)
    image3 = mp.imread(jpg3)
    image4 = mp.imread(jpg4)

    image0 = img_as_ubyte(image0)
    image1 = img_as_ubyte(image1)
    image2 = img_as_ubyte(image2)
    image3 = img_as_ubyte(image3)
    image4 = img_as_ubyte(image4)

    result_img0 = Image.fromarray(image0)
    result_img1 = Image.fromarray(image1)
    result_img2 = Image.fromarray(image2)
    result_img3 = Image.fromarray(image3)
    result_img4 = Image.fromarray(image4)

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



猜你喜欢

转载自blog.csdn.net/MengYa_Dream/article/details/129181335