1.前言
大家在做2D图像分类的时候,代码经常要求图像是RGB格式。有时候我们的图像并不是RGB,尤其是处理病理图像切分的pach的时候,这时候就需要批量进行格式转换了。好了,直接上代码:
import os
from PIL import Image
# 根目录路径
root_dir = "TCGA_SVS"
# 定义需要处理的子文件夹
subfolders = ["TCGA_GBM", "TCGA_LGG"]
# 遍历每个子文件夹中的所有PNG图像
for subfolder in subfolders:
folder_path = os.path.join(root_dir, subfolder)
# 确保目标文件夹存在
if not os.path.exists(folder_path):
print(f"文件夹 {folder_path} 不存在,跳过该文件夹.")
continue
# 遍历文件夹中的所有PNG文件
for filename in os.listdir(folder_path):
if filename.endswith(".png"):
image_path = os.path.join(folder_path, filename)
# 打开图像
img = Image.open(image_path)
# 检查图像的模式,并转换为RGB(如果需要)
if img.mode != 'RGB':
print(f"转换图像: {image_path}")
img = img.convert('RGB')
# 保存转换后的图像,可以选择覆盖原文件或保存为新的文件名
# 这里我们选择保存为同名文件,覆盖原文件
img.save(image_path)
else:
print(f"图像 {image_path} 已是RGB格式,跳过转换.")
2. 代码解释:
-
根目录和子文件夹设置:
root_dir = "IMG"
:根目录是IMG
,它包含两个子文件夹GBM
和LGG
。subfolders = ["GBM", "LGG"]
:定义了子文件夹列表。
-
遍历文件夹:
os.listdir(folder_path)
获取指定文件夹中的所有文件和子文件夹。- 使用
endswith(".png")
过滤出 PNG 格式的文件。
-
检查和转换图像格式:
- 使用
img.mode
检查图像的颜色模式。 - 如果模式不是
RGB
,则调用img.convert('RGB')
将其转换为RGB
。
- 使用
-
保存图像:
- 使用
img.save(image_path)
保存转换后的图像。这里选择直接覆盖原文件。如果您不想覆盖原文件,可以更改保存路径,或者添加时间戳等后缀来避免覆盖。
- 使用
代码执行效果:
- 遍历
IMG/GBM
和IMG/LGG
文件夹中的所有 PNG 图像,检查并转换为 RGB 格式。 - 如果图像已经是 RGB 格式,则跳过该图像。
- 转换后的图像会保存回原文件路径,或者您可以选择保存到新的目录。