深度学习中通常遇到各种各样的图片,位深度有的时候各不相同,容易影响训练测试,因此为了避免麻烦,一般将图片统一为位深度是24
- 通用转换方法
python
from PIL import Image
def convert_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}")
return rgb_img
# 使用示例
convert_to_24bit('input.png', 'output_24bit.jpg')
- 针对不同位深度的详细转换方法
python
from PIL import Image
import numpy as np
def convert_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} (如果可用)")
# 根据原始模式进行相应处理
if img.mode == '1': # 1位黑白图像
print("处理1位黑白图像...")
# 方法1: 直接转换为RGB
rgb_img = img.convert('RGB')
# 方法2: 通过L模式中转(保留更多控制)
# gray_img = img.convert('L')
# rgb_img = gray_img.convert('RGB')
elif img.mode == 'L': # 8位灰度图像
print("处理8位灰度图像...")
# 将灰度转换为RGB(三个通道值相同)
rgb_img = img.convert('RGB')
elif img.mode == 'P': # 调色板模式(通常是4位或8位)
print("处理调色板图像...")
# 先转换为RGB
if img.palette:
print(f" 调色板模式: {img.palette.mode}")
rgb_img = img.convert('RGB')
elif img.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 = background
elif img.mode == 'CMYK': # 32位CMYK图像
print("处理CMYK图像...")
rgb_img = img.convert('RGB')
elif img.mode == 'RGB': # 已经是24位
print("图像已经是24位RGB模式")
rgb_img = img
else: # 其他模式
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}")
return rgb_img