<p>以一种对眼睛有意义的方式计算RGB颜色之间的距离,并不像只计算两个RGB向量之间的欧几里得距离那么简单。</p>
<p>这里有一篇有趣的文章:<a href="http://www.compuphase.com/cmetric.htm" rel="noreferrer">http://www.compuphase.com/cmetric.htm</a></p>
<p>C中的示例实现如下:</p>
<pre><code>typedef struct {
unsigned char r, g, b;
} RGB;
double ColourDistance(RGB e1, RGB e2)
{
long rmean = ( (long)e1.r + (long)e2.r ) / 2;
long r = (long)e1.r - (long)e2.r;
long g = (long)e1.g - (long)e2.g;
long b = (long)e1.b - (long)e2.b;
return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
</code></pre>
<p>移植到Python应该不会太困难。</p>
<p><strong>编辑:</strong></p>
<p>或者,按照<a href="https://stackoverflow.com/a/4171566/372643">this answer</a>中的建议,可以使用<a href="http://en.wikipedia.org/wiki/HSL_and_HSV" rel="noreferrer">HLS and HSV</a>。<a href="http://docs.python.org/library/colorsys.html" rel="noreferrer">^{<cd1>}</a>模块似乎具有从RGB进行转换的函数。它的文档还链接到这些页面,这些页面值得阅读,以理解为什么RGB欧几里得距离不能真正工作:</p>
<ul>
<li><a href="http://www.poynton.com/ColorFAQ.html" rel="noreferrer">http://www.poynton.com/ColorFAQ.html</a></li>
<li><a href="http://www.cambridgeincolour.com/tutorials/color-space-conversion.htm" rel="noreferrer">http://www.cambridgeincolour.com/tutorials/color-space-conversion.htm</a></li>
</ul>
<p><strong>编辑2:</strong></p>
<p>根据<a href="https://stackoverflow.com/a/3565191/372643">this answer</a>,这个库应该有用:<a href="http://code.google.com/p/python-colormath/" rel="noreferrer">http://code.google.com/p/python-colormath/</a></p>