【问题标题】:Python Opencv Tell the color name when get rgb from imagePython Opencv 从图像中获取 rgb 时告诉颜色名称
【发布时间】:2020-11-29 16:26:39
【问题描述】:

我需要获取图像特定区域中像素的颜色。 我在 python 中使用这个脚本:

import cv2

image = cv2.imread('abc.jpg')

color = image[100,50]

print(color) # gives me the RGB color (12,156,222)

如果需要获取它的十六进制:

hex = (color[0] << 16) + (color[1] << 8) + (color[2])

我的问题是:有办法告诉我它是什么颜色吗? (12,156,222) 谢谢。

【问题讨论】:

  • “颜色”是指色轮上以度数为单位的色调,还是用单词描述的颜色?
  • 并非所有 rgb 颜色都有名称。您必须创建一个颜色名称列表及其关联的 rgb 值,并找到与您的 rgb 值最接近的命名颜色。请参阅命名颜色的 CSS 列表。

标签: python-3.x opencv


【解决方案1】:

您可以查看:https://shallowsky.com/colormatch/index.php?r=12&g=156&b=222

[剧透警告:“DeepSkyBlue3”]

一般来说,你要开始

  1. 名称列表 → R、G、B 值和
  2. 距离函数

然后就是计算每个值与您的目标值之间的距离。 返回与目标距离最短的列表条目的相应名称。

以前的 SO 答案提供了这样的算法:Python - Find similar colors, best way

在一些随机色彩空间中使用欧几里得距离(L2范数)是小于原则的, 虽然通常就足够了。 如果您想了解细节,请考虑依赖https://python-colormath.readthedocs.io。 (您甚至可能想与作者讨论维护问题。)

如果“感知相似”对您很重要,请务必使用 Lab:https://en.wikipedia.org/wiki/CIELAB_color_space

【讨论】:

【解决方案2】:

我找到了解决这个问题的另一种方法 使用webcolor 我能够检测到最接近的颜色

import webcolors
import time
start = time.time()
def closest_colour(requested_colour):
    min_colours = {}
    for key, name in webcolors.CSS3_HEX_TO_NAMES.items():
        r_c, g_c, b_c = webcolors.hex_to_rgb(key)
        rd = (r_c - requested_colour[0]) ** 2
        gd = (g_c - requested_colour[1]) ** 2
        bd = (b_c - requested_colour[2]) ** 2
        min_colours[(rd + gd + bd)] = name
    return min_colours[min(min_colours.keys())]

def get_colour_name(requested_colour):
    try:
        closest_name = actual_name = webcolors.rgb_to_name(requested_colour)
    except ValueError:
        closest_name = closest_colour(requested_colour)
        actual_name = None
    return actual_name, closest_name

requested_colour = (255, 0, 0)
actual_name, closest_name = get_colour_name(requested_colour)

print("Actual colour name:", actual_name, ", closest colour name:", closest_name)
print("Tempo: ", time.time() - start)

如果有人有其他更好的方法,请在这里发送^^

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2018-12-23
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多