最近在跑一个深度学习模型,用arcgis制作样本标签后,裁剪成了512X512大小
但裁剪完后,有很多全为背景的空样本
数量太多,手动删除比较费劲,想了个法子把空的样本删掉
步骤是:
一、剔除label文件夹里空值样本
def are_all_pixels_white(image_path):
with Image.open(image_path) as img:
# 转换为RGBA,因为有些图像可能有透明度通道
img = img.convert("RGBA")
# 获取图像尺寸
width, height = img.size
# 遍历所有像素
for y in range(height):
for x in range(width):
# 获取像素值(RGBA)
r, g, b, a = img.getpixel((x, y))
# 如果任何颜色通道不是255,则返回False
if r != 255 or g != 255 or b != 255 or a != 255:
return False
# 如果所有像素都是白色(255, 255, 255, 255),则返回True
return True
def delete_white_images(directory):
# 遍历目录中的所有文件
for filename in os.listdir(directory):
# 检查文件是否为图像文件(这里只检查.png和.jpg,但你可以根据需要添加更多)
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tif', '.gif')):
file_path = os.path.join(directory, filename)
# 检查图像是否全为白色
if are_all_pixels_white(file_path):
# 如果是,则删除文件
os.remove(file_path)
print(f"Deleted white image: {filename}")
二、对比label和image里文件名称,删除image文件夹里名称不一致样本
def delete_mismatching_images(dir1, dir2):
# 获取第一个文件夹中所有文件的名称(不包括路径)
files_in_dir1 = set(os.listdir(dir1))
# 遍历第二个文件夹中的所有文件
for filename in os.listdir(dir2):
# 如果文件名不在第一个文件夹的文件名集合中
if filename not in files_in_dir1:
# 构建第二个文件夹中文件的完整路径
file_path = os.path.join(dir2, filename)
# 删除文件
try:
os.remove(file_path)
print(f"Deleted file: {file_path}")
except OSError as e:
print(f"Error: {e.strerror} : {file_path}")
``