python如何给指定的颜色给与一个索引值

在处理图像时,遇到将颜色映射到索引值的需求。尝试使用PIL库的Image.convert方法,但该方法的调色板技术不支持自定义索引颜色。在研究中发现,PIL在将RGB图像转换为P模式时,特定颜色有固定的索引值。最终通过 deeplab-v3+ 源码找到解决方案,可以对cv2读取的ndarray图像进行颜色与索引的映射,并能将P模式转回RGB模式显示。
摘要由CSDN通过智能技术生成

首先想到的方法是直接调用PIL库Image的convert方法

img = img.convert(model = 'p')

但covert中的调色板技术使用的是WEB和ADAPTIVE两种,先生成256位的数组,确定索引,再使用快速二叉树给索引值指定颜色,暂未找到更改索引对应颜色的方法。还发现有趣的是,Image的convert将RGB图像转化为P模式的图像,会将(255,0,0)转成值为15,(255,255,0)值为40,(0,255,0)为45,(0,0,255)转为192.不知道这个值怎么计算出来的。

 

最后找到有效的方法:来自deeplab-v3+的公开源码中对pascal voc 数据集处理:

def encode_segmap(mask):

    """Encode segmentation label images as pascal classes
    Args:
        mask (np.ndarray): raw segmentation label image of dimension
          (M, N, 3), in which the Pascal classes are encoded as colours.
    Returns:
        (np.ndarray): class map with dimensions (M,N), where the value at
        a given location is the integer denoting the class index.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值