繁体   English   中英

检查一个颜色是否是其他两个 colors 的插值

[英]Check if a color is an interpolation of other two colors

这是我当前的代码:

from PIL import ImageColor
import numpy as np
a=0
colors = [
([17, 15, 100], [50, 56, 200]),
([86, 31, 4], [220, 88, 50]),
([25, 146, 190], [62, 174, 250]),
([103, 86, 65], [145, 133, 128])
]
for (low, high) in colors:
    low = np.array(low, dtype="uint8")
    high = np.array(high, dtype="uint8")
    #if np.array(ImageColor.getcolor('#300103', "RGB"), dtype="uint8") is in between low and high, a=1

我想知道某种颜色是否在两个 colors 之间,有点像cv2.inRange() ,但不是查看图片的像素是否在两个 colors 之间,如果是的话,我想看看如果单一颜色介于两个 colors 之间。

“介于”其他两个颜色之间的颜色有点问题,因为没有一个单一的定义:如果在 RGB 空间中改变 colors,正如在实践中定义的那样,这是学校数学的问题:取第一个分量(红色),检查两端的两个 colors 之间的相对距离(第一行为 50 - 17 = 33),选择被检查颜色的红色分量,查看其与较低值的距离- 对于颜色 #300103,红色分量将是十进制的“48” - 48 - 17 = 31。使用因子 31/33,并检查其他 2 个分量是否与 ( 17、15、100)。

由于舍入误差,可能会使用math.close并允许每个组件有 1 或 2 个单位的波动。

但是,如果您可能有一组 colors 位于符合此标准的灰色光谱上,并且在任一边缘都与 colors 没有相似之处。 (例如,如果您从 (255, 0, 0) 和 (0, 0, 255) 开始,则 (128, 0, 128) 将匹配,但它的饱和度是任何一种颜色的一半。

使用 HSV 颜色空间,而不是 RGB,可能会让您进入 colors,它在“中间”的感知上表现得更好。 但是,如果不知道你的真正目标,很难说它是否有意义——对于上面的例子,情况会更糟,因为它会匹配绿色和其他完全饱和的 colors。

请原谅,但我不会在这里填写 RGB 插值的确切代码,这应该不难 - 但需要一些时间才能正确 - 而且它可能根本不适合你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM