python判断、获取一张图片主色调的2个实例

  

下面我将为你详细讲解"Python判断、获取一张图片主色调的2个实例"的完整攻略。

1. 使用Python Pillow库

Pillow是Python Image Library的一个分支,它提供了一组强大的图像处理功能,可以用于对图像的读取、切割、拼接、调整大小、旋转、滤镜等各种操作。下面是使用Pillow库获取图片主色调的示例代码:

from PIL import Image
import colorsys

def get_image_main_color(image_path):
    with Image.open(image_path) as im:
        # 获取图像中每种颜色的像素值
        pixels = im.getcolors(im.size[0] * im.size[1])
        # 按像素值从大到小排序
        sorted_pixels = sorted(pixels, key=lambda t: t[0], reverse=True)
        # 取最大的像素值作为主色调
        max_color = sorted_pixels[0][1]
        # 将RGB转换成HSB(色相、饱和度、亮度)格式
        h, s, v = colorsys.rgb_to_hsv(*[x/255.0 for x in max_color])
        # 将HSB转换成RGB格式
        r, g, b = colorsys.hsv_to_rgb(h, s, v)
        # 将RGB格式的整数值转换成十六进制字符串
        hex_color = "{0:02x}{1:02x}{2:02x}".format(int(r*255), int(g*255), int(b*255))
        return hex_color

使用该函数可以获取到图片的主色调,示例代码如下:

image_path = "test.jpg"
main_color = get_image_main_color(image_path)
print("The main color of image is: #" + main_color)

2. 使用Python颜色识别库

除了使用Pillow库以外,还可以使用Python的颜色识别库进行获取主色调。下面是使用颜色识别库获取图片主色调的示例代码:

from colormath.color_objects import RGBColor
from colormath.color_diff import delta_e_cie1976
from colormath.color_conversions import convert_color
import webcolors
from PIL import Image

def get_image_main_color(image_path):
    with Image.open(image_path) as im:
        # 获取图像中每种颜色的像素值
        pixels = im.getcolors(im.size[0] * im.size[1])
        # 按像素值从大到小排序
        sorted_pixels = sorted(pixels, key=lambda t: t[0], reverse=True)
        # 取前5种颜色
        top_five = sorted_pixels[:5]
        # 获取每种颜色对应的RGB值
        colors = []
        for count, color in top_five:
            rgb = tuple([int(round(c)) for c in color])
            colors.append(RGBColor(rgb[0], rgb[1], rgb[2]))
        # 计算每种颜色与其它颜色之间的差异值
        diffs = []
        for color1 in colors:
            diff = 0
            for color2 in colors:
                lab1 = convert_color(color1, RGBColor).convert_to('lab')
                lab2 = convert_color(color2, RGBColor).convert_to('lab')
                diff += delta_e_cie1976(lab1, lab2)
            diffs.append(diff)
        # 选择差异值最小的颜色作为主色调
        index = diffs.index(min(diffs))
        rgb = colors[index].get_value_tuple()
        # 将RGB格式的整数值转换成十六进制字符串
        hex_color = "{0:02x}{1:02x}{2:02x}".format(*rgb)
        return hex_color

使用该函数可以获取到图片的主色调,示例代码如下:

image_path = "test.jpg"
main_color = get_image_main_color(image_path)
# 判断是否为标准颜色
try:
    name = webcolors.rgb_to_name(tuple(int(main_color[i:i+2], 16) for i in (0, 2, 4)))
    print("The main color of image is: " + name)
except ValueError:
    print("The main color of image is: #" + main_color)

以上就是使用Python获取一张图片主色调的两个实例,希望可以帮助到你。

相关文章