📜  查找最接近的颜色 python (1)

📅  最后修改于: 2023-12-03 15:10:45.493000             🧑  作者: Mango

查找最接近的颜色 Python

有时候在编程中我们需要查找图片的主要颜色或者匹配一种颜色,但是我们并不知道如何查找。在这篇文章中,我们将介绍如何使用 Python 找到最接近的颜色,为你的项目添加更好的视觉效果和用户体验。

步骤1:获得颜色列表

我们首先需要获得一个用于比较的颜色列表。为此,我们可以使用 Python 中的 webcolors 库。这个库提供了一个名为 CSS3_NAMES_TO_HEX 的字典,其中包括了 CSS3 中定义的颜色名称和十六进制表示。我们将使用这个字典。代码如下:

from webcolors import CSS3_NAMES_TO_HEX

color_list = list(CSS3_NAMES_TO_HEX.values())
步骤2:找到最接近的颜色

我们现在有了一个 color_list,接下来我们需要找到最接近的颜色。为此,我们将使用 scipy 库中的 cdist 函数来计算所有颜色与目标颜色的距离,并使用 argmin 函数找到最小距离。代码如下:

from scipy.spatial.distance import cdist
import numpy as np

def closest_color(requested_color):
    """
    Find the closest color from webcolors to the requested color.
    """
    min_colors = {}
    for key, name in CSS3_NAMES_TO_HEX.items():
        r_c, g_c, b_c = webcolors.hex_to_rgb(name)
        color_rgb = np.array([r_c, g_c, b_c])
        requested_rgb = np.array(requested_color)
        dist = np.linalg.norm(color_rgb - requested_rgb)
        min_colors[dist] = key
    return min_colors[min(min_colors.keys())]

其中 requested_color 是我们要查找的颜色的 RGB 值。我们使用 webcolors.hex_to_rgb() 函数将颜色的十六进制表示转换为 RGB 值,并使用 numpy 库将其转换为 numpy 数组以进行计算。返回的结果是最接近的颜色的名称。

步骤3:测试程序

现在,我们有了一个完整的程序。我们可以输入 RGB 值并测试程序是否有效。例如,我们要查找最接近的颜色:

requested_color = (66, 135, 245)
color_name = closest_color(requested_color)
print("The closest color to", requested_color, "is", color_name)

输出应该是:

The closest color to (66, 135, 245) is dodgerblue
总结

在本文中,我们介绍了如何使用 Python 查找最接近的颜色。我们使用了 webcolors 库来获得一个颜色列表,使用 scipy 库来计算距离,并使用 numpy 库来处理 RGB 值。这样的程序可以用来匹配一种特定的颜色,从而改善你的项目的视觉效果和用户体验。