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
相关推荐
迅猛龙办公室34 分钟前
python实现倒序输出数字
开发语言·python
全栈练习生10 小时前
AI Agent 沙箱
python·ai
SEO_juper11 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户83562907805112 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
for_ever_love__12 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户83562907805112 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_4617694013 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_9669496513 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿13 小时前
Python实战第1期:Python环境搭建与第一个程序
python
心易行者13 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache