提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在红外与可见光图像融合任务中,由于TNO数据集数量太少,常常需要我们将数据集进行划动拆分,本文通过代码实现,将图像进行拆分
一、代码实现
import cv2 import os import math import shutil # 根据任务要求,定义一个caijian函数 def caijian(path, path_out, size_w=256, size_h=256, step=12): # step为步长,设置为12 ims_list = os.listdir(path) # 在此例中调用时,ims_list为['image.png', 'label.png'] for im_list in ims_list: number = 0 name = im_list[:] # 读取整张图片 img = cv2.imread(ims_path+name) # 读取要切割的图片 size = img.shape i = 0 for h in range(0, size[0], step): star_h = h # star_h表示起始高度,从0以步长step=12开始循环 for w in range(0, size[1], step): star_w = w # star_w表示起始宽度,从0以步长step=12开始循环 end_h = star_h + size_h # end_h是终止高度 if end_h > size[0]: # 如果边缘位置不够256的列 # 以倒数512形成裁剪区域 star_h = size[0] - size_h end_h = star_h + size_h i = i - 1 end_w = star_w + size_w # end_w是中止宽度 if end_w > size[1]: # 如果边缘位置不够256的行 star_w = size[1] - size_w end_w = star_w + size_w i = i - 1 cropped = img[star_h:end_h, star_w:end_w] # 执行裁剪操作 i = i + 1 name_img = str(i) # 命名图片,图片名字从1开始命名 cv2.imwrite('{}/{}.png'.format(path_out, name_img), cropped) # 将切割得到的小图片存在path_out路径下 # 将完整的图像划分为小块 if __name__ == '__main__': ims_path = 'D:\Evaluation-for-Image-Fusion-main\Image\Source-Image\TNO\ir2\\' # 图像数据集的路径 # 在result文件夹下,创建一个label_s文件夹,用于存放label切割的结果 path = 'D:\Evaluation-for-Image-Fusion-main\Image\Source-Image\TNO\ir1' # 切割得到的数据集存放路径, if not os.path.exists(path): os.makedirs(path) caijian(ims_path, path, size_w=256, size_h=256, step=12)
总结
本文实现了对红外可见光图像进行滑动拆分,值得注意的是,本文使用的cv2图像进行读取,读取的图像要求是彩色图像