PIL.Image 调色板模式处理标签数据

1 使用PIL.Image库进行调色板模式

基本步骤:

  1. 自定义调色板,数据格式是一个Nx3的二维数组,一维数组的位置为分类的下标
  2. 数据类型为np.uint8
  3. 转化为调色板模式后img.convert("P"),设置调色板即可img.putpalette(bin_colormap)
# 定义调色板的索引
bin_colormap = np.array([[0, 0, 0], [255, 0, 0]]).astype(np.uint8)  # 会按照值的循序进行索引
bin_colormap_reverse = np.array([[0, 0, 0], [255, 255, 255]]).astype(np.uint8)  # 会按照值的循序进行索引

Example:

def imgRGB2P(src_path, dst_path):
    # 定义调色板的索引
    bin_colormap = np.array([[0, 255, 0], [255, 0, 0]]).astype(np.uint8)  # 会按照值的循序进行索引
    bin_colormap_reverse = np.array([[0, 0, 0], [255, 255, 255]]).astype(np.uint8)  # 会按照值的循序进行索引
    img = Image.open(src_path)
    # 转化为p模式
    img_p = img.convert("P")
    img_p.putpalette(bin_colormap)
    img_p.save(dst_path)

2 转回原来的色彩

设置原来的色彩空间,使用调色板模式(单通道的图)进行索引即可

def imgP2RGB(src_path, dst_path):
    # 调色板前后的关系为下标对应
    bin_colormap = np.array([[0, 255, 0], [255, 0, 0]]).astype(np.uint8)  # 会按照值的循序进行索引
    bin_colormap_reverse = np.array([[0, 0, 0], [255, 255, 255]]).astype(np.uint8)  # 按照索引映射会原图
    img = np.array(Image.open(src_path))

    # 转化为RGB
    img_RGB = bin_colormap_reverse[img]
    img_RGB = Image.fromarray(img_RGB).convert("L")
    img_RGB.save(dst_path)

3 效果

原图:
在这里插入图片描述

自定义调色板,p模式

在这里插入图片描述

参考

【PIL】——PIL灰度图以调色板保存成彩图 https://blog.csdn.net/u011622208/article/details/111181378

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
灰度模式调色板模式是两种不同的图像存储方式。 灰度模式(L)是指将彩色图像转换为灰度图像,即只包含灰度级别的图像。在灰度模式下,图像的每个像素只有一个灰度值,表示亮度或灰度的强度。在保存灰度图像时,可以直接使用cv2.imwrite()函数进行保存,并且在读取时需要按照灰度图的方式读取,可以使用OpenCV或PIL格式进行读取\[1\]。 调色板模式(P)是一种基于调色板的颜色表示方式,也称为索引颜色模式。在调色板模式下,图像的每个像素值表示颜色在调色板中的索引。调色板是一个包含颜色映射表的数组,每个索引对应一个具体的颜色。在保存调色板模式的图像时,需要将颜色索引和调色板信息一起保存\[2\]。在读取调色板模式的图像时,可以使用cv2.imread()函数读取灰度图像,或者使用PIL库中的Image.open()函数读取图像,并将其转换为numpy数组\[3\]。 总结来说,灰度模式是将彩色图像转换为灰度图像,只包含灰度级别的信息;而调色板模式是基于调色板的颜色表示方式,使用颜色索引和调色板信息来表示图像的颜色。 #### 引用[.reference_title] - *1* *3* [语义分割标签——mask的读取与保存](https://blog.csdn.net/wzw12315/article/details/119457961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [opencv-python(六):颜色空间及转换](https://blog.csdn.net/qq_40243750/article/details/113822979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值