深度学习中通常遇到各种各样的图片,位深度有的时候各不相同,容易影响训练测试,因此为了避免麻烦,一般将图片统一为位深度是24
- 通用转换方法
fromPILimportImagedefconvert_to_24bit(input_path,output_path):""" 将任意位深度的图片转换为24位RGB图像 参数: input_path: 输入图片路径 output_path: 输出图片路径 """# 打开图片img=Image.open(input_path)# 转换为RGB模式(24位)rgb_img=img.convert('RGB')# 保存图片rgb_img.save(output_path)print(f"转换完成:{input_path}->{output_path}")print(f"原始模式:{img.mode}, 转换后模式:{rgb_img.mode}")print(f"原始大小:{img.size}, 转换后大小:{rgb_img.size}")returnrgb_img# 使用示例convert_to_24bit('input.png','output_24bit.jpg')- 针对不同位深度的详细转换方法
fromPILimportImageimportnumpyasnpdefconvert_specific_bit_depth(input_path,output_path):""" 针对不同位深度进行详细转换 """img=Image.open(input_path)print(f"原始图像信息:")print(f" 模式:{img.mode}")print(f" 大小:{img.size}")print(f" 位深度:{img.bits}(如果可用)")# 根据原始模式进行相应处理ifimg.mode=='1':# 1位黑白图像print("处理1位黑白图像...")# 方法1: 直接转换为RGBrgb_img=img.convert('RGB')# 方法2: 通过L模式中转(保留更多控制)# gray_img = img.convert('L')# rgb_img = gray_img.convert('RGB')elifimg.mode=='L':# 8位灰度图像print("处理8位灰度图像...")# 将灰度转换为RGB(三个通道值相同)rgb_img=img.convert('RGB')elifimg.mode=='P':# 调色板模式(通常是4位或8位)print("处理调色板图像...")# 先转换为RGBifimg.palette:print(f" 调色板模式:{img.palette.mode}")rgb_img=img.convert('RGB')elifimg.mode=='RGBA':# 32位RGBA图像print("处理32位RGBA图像...")# 创建白色背景background=Image.new('RGB',img.size,(255,255,255))# 将RGBA图像粘贴到白色背景上background.paste(img,mask=img.split()[3])# 使用alpha通道作为掩码rgb_img=backgroundelifimg.mode=='CMYK':# 32位CMYK图像print("处理CMYK图像...")rgb_img=img.convert('RGB')elifimg.mode=='RGB':# 已经是24位print("图像已经是24位RGB模式")rgb_img=imgelse:# 其他模式print(f"处理未知模式:{img.mode}")rgb_img=img.convert('RGB')# 保存图像rgb_img.save(output_path,quality=95)print(f"转换完成 ->{output_path}")print(f"转换后模式:{rgb_img.mode}")returnrgb_img