提取图像主色调

依赖 Pillow 库。

提取图像主色调,直接上代码:

from PIL import Image

def extract_main_color(img_path: str, delta_h: float = 0.3) -> str:
    """获取图像主色调

    Args:
        img_path: 输入图像的路径
        delta_h: 像素色相和平均色相做减法的绝对值小于该值,才用于计算主色调,取值范围[0,1]

    Returns:
        颜色值,eg: FFFFFF
    """
    r, g, b = 0, 0, 0
    im = Image.open(img_path)
    if im.mode != "RGB":
        im = im.convert("RGB")
    # 转换成HSV即 色相(Hue)、饱和度(Saturation)、明度(alue),取值范围[0,1]
    # 取H计算平均色相
    all_h = [colorsys.rgb_to_hsv(*im.getpixel((x, y)))[0] for x in range(im.size[0]) for y in range(im.size[1])]
    avg_h = sum(all_h) / (im.size[0] * im.size[1])
    # 取与平均色相相近的像素色值rgb用于计算,像素值取值范围[0,255]
    beyond = list(
        filter(
            lambda x: abs(colorsys.rgb_to_hsv(*x)[0] - avg_h) < delta_h,
            [im.getpixel((x, y)) for x in range(im.size[0]) for y in range(im.size[1])],
        )
    )
    if len(beyond):
        r = int(sum(e[0] for e in beyond) / len(beyond))
        g = int(sum(e[1] for e in beyond) / len(beyond))
        b = int(sum(e[2] for e in beyond) / len(beyond))

    color = "{}{}{}".format(hex(r)[2:].zfill(2), hex(g)[2:].zfill(2), hex(b)[2:].zfill(2))
    return color.upper()

示例图:
请添加图片描述
提取主色调为 905C4C
在这里插入图片描述

还可以直接使用Python库 py-img-processor

# pip install py-img-processor

from imgprocessor.processor import extract_main_color

extract_main_color("lenna.jpg")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值