图片从RGB转换成Lab

由于图片的Lab色彩空间的值没法直接得到,需要手动计算转换;网上也有很多方法,但是准确度都不统一,我之前做色彩还原时,在这上面花了不少时间,本文提供一种计算方法,经过测试与标准值几乎一致。
代码如下:

import colorsys
from PIL import Image
def get_dominant_color(image):
    
#颜色模式转换,以便输出rgb颜色值
    image = image.convert('RGBA')
    
#生成缩略图,减少计算量,减小cpu压力
    image.thumbnail((200, 200))
    
    max_score = 0
    dominant_color = 0
    
    for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
        # 跳过纯黑色
        if a == 0:
            continue
        
        saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]
       
        y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)
       
        y = (y - 16.0) / (235 - 16)
        
        # 忽略高亮色
        if y > 0.9:
            continue
        
        score = (saturation + 0.1) * count
        
        if score > max_score:
            max_score = score
            dominant_color = (r, g, b)
        if ((r>200)&(g>200)&(b>200)):
            continue

    
    return dominant_color

cc=get_dominant_color(Image.open('img/b.jpg'))

print(cc)

R=cc[0]
G=cc[1]
B=cc[2]

L=0.2126*R+0.7152*G+0.0722*B

a=1.4749*(0.2213*R-0.3390*G+0.1177*B)+128

b=0.6245*(0.1949*R+0.6057*G-0.8006*B)+128

print('RGB转换后的Lab值为:('"%.3f"%L+','+"%.3f"%a+','"%.3f"%b+')')

结果如下:
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值