擅长:python、mysql、java
<p>扩展mattsap的答案:</p>
<p>我们不需要对所有颜色进行排序,因为我们只需要查找最接近的<em>。i、 我们可以避免计算上昂贵的<code>sort</code>,而是使用<code>min</code>。</p>
<p>我们也不需要计算颜色之间的绝对距离,因为我们只对相对距离感兴趣。i、 我们也可以避免毕达哥拉斯的“平方根”部分。</p>
<p>这就提供了:</p>
<pre><code>colours = ( (255, 255, 255, "white"),
(255, 0, 0, "red"),
(128, 0, 0, "dark red"),
(0, 255, 0, "green") )
def nearest_colour( subjects, query ):
return min( subjects, key = lambda subject: sum( (s - q) ** 2 for s, q in zip( subject, query ) ) )
print( nearest_colour( colours, (64, 0, 0) ) ) # dark red
print( nearest_colour( colours, (0, 192, 0) ) ) # green
print( nearest_colour( colours, (255, 255, 64) ) ) # white
</code></pre>
<p>当然,一旦你考虑到不同的颜色空间以及每种颜色成分对人眼感知的贡献,就会有一个完整的兔子洞要钻下去,<a href="https://stackoverflow.com/questions/8863810/python-find-similar-colors-best-way">as per this question</a>,但在大多数情况下,这可能是过度的杀伤力。</p>