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
相关推荐
浩瀚地学4 小时前
deepagents学习打卡day04
python·agent
安易算力4 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes
troy1285 小时前
Codex 安全盲区:代码漏洞生成实测
windows·python·ci/cd·pycharm·django·github·fastapi
嵌入式学习菌5 小时前
Workbuddy自动写一个RS485 / LoRa 参数调试工具
python
钱栈up6 小时前
番茄小说榜单爬虫失效排查:从页面路由变更到API参数映射的全流程复盘
python
唐璜Taro6 小时前
Agent Harness 系列 · 第 1 篇|Agent 不只是换一个更强的模型
人工智能·python
泡茶喝茶写代码6 小时前
量化数据进阶:多维实战篇(第 11 篇):历史涨跌停价:涨跌停序列与止损线测算
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
ikun_文7 小时前
Django开启跨域请求
python·pycharm·django
外收内放7 小时前
Python与AI应用(项目开发实战:AI智能伴侣第三版)
python·学习·ai编程
别动我齐刘海7 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人