论文必备图像拼接笔记
速通结果:
现有:测试样本相同(名命相同),测试模型不同,测试结果分别保存至不同文件夹
目标:结果显示在同一张图像上
目录
论文必备图像拼接笔记
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.简单明了的拼接方式
- 小白易理解,高手可改进循环。
- 注意:该方法按照数字对应拼接,确保1.jpg在所有文件夹中源自同一样本!
- 其中skimage安装失败问题,可尝试python|安装skimage库报错:required to install pyproject.toml-based projects_
-
pip install scikit-image pip3 install scikit-image conda install scikit-image
#导入相应的包
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) #保存图像