📅  最后修改于: 2023-12-03 15:10:45.493000             🧑  作者: Mango
有时候在编程中我们需要查找图片的主要颜色或者匹配一种颜色,但是我们并不知道如何查找。在这篇文章中,我们将介绍如何使用 Python 找到最接近的颜色,为你的项目添加更好的视觉效果和用户体验。
我们首先需要获得一个用于比较的颜色列表。为此,我们可以使用 Python 中的 webcolors 库。这个库提供了一个名为 CSS3_NAMES_TO_HEX
的字典,其中包括了 CSS3 中定义的颜色名称和十六进制表示。我们将使用这个字典。代码如下:
from webcolors import CSS3_NAMES_TO_HEX
color_list = list(CSS3_NAMES_TO_HEX.values())
我们现在有了一个 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 数组以进行计算。返回的结果是最接近的颜色的名称。
现在,我们有了一个完整的程序。我们可以输入 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 值。这样的程序可以用来匹配一种特定的颜色,从而改善你的项目的视觉效果和用户体验。