Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 彩虹中颜色的接近度_Python - Fatal编程技术网

Python 彩虹中颜色的接近度

Python 彩虹中颜色的接近度,python,Python,我得到了n个属于彩虹的点(或者接近“彩虹颜色”)。现在给定一个点,也是彩虹色,我想在n个点中找到最接近的匹配 要做到这一点,什么是稳健而简单的数据结构+算法组合?我想到了使用(R,G,B)元组和欧拉距离 是的,我得到了一个严肃的用例:-)您基本上是对的,但是HSL或HSV可能会允许更高的准确性,因为您可以加权属性。请参阅。您可能应该将RGB值转换为基于色调的匹配颜色接近度更容易的位置。我不是在玩彩虹;-)但我有几乎相同的情况,我使用kd树快速搜索最近的“点”。我的点也是0-1浮动形式的rgb颜色

我得到了n个属于彩虹的点(或者接近“彩虹颜色”)。现在给定一个点,也是彩虹色,我想在n个点中找到最接近的匹配

要做到这一点,什么是稳健而简单的数据结构+算法组合?我想到了使用(R,G,B)元组和欧拉距离


是的,我得到了一个严肃的用例:-)

您基本上是对的,但是HSL或HSV可能会允许更高的准确性,因为您可以加权属性。请参阅。

您可能应该将RGB值转换为基于色调的匹配颜色接近度更容易的位置。

我不是在玩彩虹;-)但我有几乎相同的情况,我使用kd树快速搜索最近的“点”。我的点也是0-1浮动形式的rgb颜色

你说的彩虹颜色,通常意义上是指可见光谱中的单色颜色,即单一频率的颜色(白色或粉色不是彩虹颜色)。在这种情况下,您有一个巨大的优势,就是能够仅用频率或波长,一个数字来表示它们。例如,在此处查看与彩虹光谱的样本划分相对应的频率:

所以现在你有n个数字,然后你选择另一个数字(另一种彩虹颜色),然后决定它最接近哪一个。这应该是微不足道的


因此,如果你有彩虹颜色的频率(你应该这样做,否则你怎么知道它们是彩虹颜色?),这是一个简单的工作。

你的意思是?除此之外,你的建议听起来是一个很好的解决方案——选择彩虹颜色的RGB值作为目标,然后使用(R,G,B)作为坐标,测量给定颜色和目标颜色之间的距离。你也可以看看其他的距离度量——有一些例子。你可能应该把你所有的颜色转换成LAB,然后进行距离计算,因为它比RGB在感知上更均匀。
from kdtree import KDTree

data = [(1,2,3),(4,0,1),(5,3,1),(10,5,4),(9,8,9),(4,2,4)]

tree = KDTree.construct_from_data(data)
nearest = tree.query(query_point=(5,4,3), t=1)