使用labelme标签工具时,部分图片为32位,无法正常打开,此时需将32位图片转换为24位图片。
import os
from PIL import Image
def convert_images_to_24bit_jpg(input_dir, output_dir):
# 确保输出目录存在
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历输入目录中的所有文件
for filename in os.listdir(input_dir):
# 构造完整的文件路径
filepath = os.path.join(input_dir, filename)
# 检查文件是否为图像文件(这里简单判断后缀名,可以根据需要扩展)
if filepath.lower().endswith(('.jpg','.png', '.bmp', '.tiff', '.tif', '.ppm', '.pgm', '.pbm')):
try:
# 打开图像
with Image.open(filepath) as img:
# 检查图像模式是否为'RGBA'(32位图像通常具有alpha通道)
if img.mode == 'RGBA':
# 转换为'RGB'模式(24位,无alpha通道)
img_rgb = img.convert('RGB')
else:
# 如果图像不是'RGBA'模式,但仍然是32位(可能是其他模式,如'I;16'等),
# 则直接尝试转换为'RGB'模式(Pillow通常会处理这种转换)
# 注意:对于非标准32位图像模式,这一步可能需要额外的处理
img_rgb = img.convert('RGB')
# 构造输出文件路径
output_filepath = os.path.join(output_dir, os.path.splitext(filename)[0] + '.jpg')
# 保存为JPG格式
img_rgb.save(output_filepath, 'JPEG')
print(f"Converted {filepath} to {output_filepath}")
except Exception as e:
print(f"Failed to convert {filepath}: {e}")
# 指定输入目录
input_directory = 'F:\\data\\a6\\image'
# 指定输出目录
output_directory = 'F:\\data\\a6\\image'
# 执行转换
convert_images_to_24bit_jpg(input_directory, output_directory)
这里提供位深转换代码,修改输入输出路径即可。