在对遥感影像进行裁剪时,很多背景也会被裁剪出来作为一个图像,而背景值过多会影响网络性能。
该代码主要去除全0图片,全255图片,仅含0和255的图片。
import os
import cv2
import numpy as np
import shutil
"""
去除值为255,即全为背景的图片
"""
def getFileList(dir, Filelist, ext=None):
"""
获取文件夹及其子文件夹中文件列表
输入 dir:文件夹根目录
输入 ext: 扩展名
返回: 文件路径列表
"""
newDir = dir
if os.path.isfile(dir):
if ext is None:
Filelist.append(dir)
else:
if ext in dir[-3:]:
Filelist.append(dir)
elif os.path.isdir(dir):
for s in os.listdir(dir):
newDir = os.path.join(dir, s)
getFileList(newDir, Filelist, ext)
return Filelist
if __name__ == '__main__':
# 图片存放路径
org_label_folder = r"E:\New_gj\dataset\T_multi_22\cut\labels_pre"
org_img_folder = r"E:\New_gj\dataset\T_multi_22\cut\images_pre"
# 检索文件
imglist = getFileList(org_img_folder, [], 'png')
labellist = getFileList(org_label_folder, [], 'png')
print('本次执行检索到 ' + str(len(imglist)) + ' 张img图像')
print('本次执行检索到 ' + str(len(labellist)) + ' 张label图像\n')
count = 0
# 提取出来的图片的存储路径
root_img = r"E:\New_gj\dataset\T_multi_22\cut\images"
root_label = r"E:\New_gj\dataset\T_multi_22\cut\labels"
for imgpath in imglist:
# 读取图片文件名,png/jpg前边的名称
imgname = os.path.splitext(os.path.basename(imgpath))[0]
# 读取图片
img = cv2.imread(imgpath, cv2.IMREAD_UNCHANGED)
# value值可以得到是否存在255
values, counts = np.unique(img, return_counts=True)
# 提取全部非NoData图片
if values[0] != 255:
if values[0] == 0 and values[1] == 255:
pass
else:
# print(imgname)
# print(values)
# print(values[0])
# print(values[1])
# exit()
count = count + 1
#print("copy")
shutil.copy(org_label_folder + '\\' + imgname + '.png', root_label + '\\' + imgname + '.png')
shutil.copy(org_img_folder + '\\' + imgname + '.png', root_img + '\\' + imgname + '.png')
print("共复制 " + str(count) + " 张图片")