PIL库将图片位深度是1、8、32统一转换为24的方法

深度学习中通常遇到各种各样的图片,位深度有的时候各不相同,容易影响训练测试,因此为了避免麻烦,一般将图片统一为位深度是24

  1. 通用转换方法
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')
  1. 针对不同位深度的详细转换方法
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
相关推荐
两万五千个小时9 小时前
落地实现 Anthropic Multi-Agent Research System
人工智能·python·架构
哈里谢顿12 小时前
Python 高并发服务限流终极方案:从原理到生产落地(2026 实战指南)
python
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng81 天前
Python+Django+H5+MySQL项目搭建
python·django
GinoWi1 天前
Chapter 2 - Python中的变量和简单的数据类型
python
JordanHaidee1 天前
Python 中 `if x:` 到底在判断什么?
后端·python
ServBay1 天前
10分钟彻底终结冗长代码,Python f-string 让你重获编程自由
后端·python
闲云一鹤1 天前
Python 入门(二)- 使用 FastAPI 快速生成后端 API 接口
python·fastapi
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
曲幽1 天前
FastAPI + Ollama 实战:搭一个能查天气的AI助手
python·ai·lora·torch·fastapi·web·model·ollama·weatherapi