python - 计算字典中最接近输入的颜色

标签 python opencv colors

我有一个颜色字典(如下)和一个颜色,例如 #4a7dac,它是 'steelblue'。我想在字典中找到与这种颜色最接近的十六进制颜色的名称。因此算法将决定 #0000ff 并返回 'blue'

colors= {
    "red":"#FF0000",
    "yellow":"#FFFF00",
    "green":"#008000",
    "blue":"#0000FF",
    "black":"#000000",
    "white":"#FFFFFF",
    "gray":"#808080",
}

我考虑过计算颜色之间的某种“距离”,但不知道如何着手编写。

最佳答案

我们可以创建一个函数,它接受两个十六进制字符串并返回各个颜色分量之间的差异之和。如果您无法理解以下内容的工作原理,请发表评论。

def diff(h1, h2):
    def hexs_to_ints(s):
        return [int(s[i:i+2], 16) for i in range(1,7,2)]
    return sum(abs(i - j) for i, j in zip(*map(hexs_to_ints, (h1, h2))))

我们可以测试它:

>>> diff('#ff00ff', '#0000ff')
255
>>> diff('#0000ff', '#00000a')
245

那么现在,我们可以创建一个使用这个函数来完成任务的函数:

def get_col_name(hex, colors):
    return min([(n,diff(hex,c)) for n,c in colors.items()], key=lambda t: t[1])[0]

不幸的是,这对您的颜色不起作用,因为它选择了 gray,即 [128, 128, 128] 非常接近 steelblue[74, 125, 172] - 比 blue 更接近 [0, 0, 255]。这意味着 gray 的差异小于 blue 的差异。我会尝试想出更好的方法,但也许有人有一些见解并可以发表评论?

关于python - 计算字典中最接近输入的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078258/

相关文章:

python - 读取大文本文件和内存

python - 多处理,有问题

python - 安装 OpenCV for Python(多个 python 版本)

html - 如何更改 html 表格中的字体颜色?

colors - 如何修改javafx colorpicker?

python - OpenCV关闭特定键上的窗口?

python - 将 YAML 文件加载到保留别名的 Python 中

Python OpenCV - 在根据特定对象条件保存视频时,并非所有此类帧都会被保存

c++ - 如何访问加载图像的各个 R/G/B 组件(较新的 C++ API)

Vim 状态行不会从表达式中扩展颜色/高亮组