2010-11-13 64 views
2

我有一个预定义颜色和给定颜色的地图来选择一个最接近的匹配。如果我将使用距离公式,我是否会计算与地图中每个预定义颜色的距离,而不是在匹配限制之间找到一个键?从std :: map选择最接近的RGB颜色

回答

0

颜色比3D复杂一点。你必须考虑亮度以及红色,绿色或蓝色的颜色。那么1,0,0比255,0,0更接近0,1,0?所以也许颜色需要被认为是四维的?另外,人类对颜色的反应并不是线性的,所以如果你只看两个RGB值之间的数学距离,就会测量一个与人类在两种颜色之间判断的距离不一致的“距离”。

对于这种类型或工作,RGB是一种非常不令人满意的颜色测量方法(尽管它对控制硬件很方便)许多人推荐使用HSL系统,它允许您设置与“颜色”无关的亮度,以及应该更接近人类对颜色的反应。

有关在这类工作中使用HSL以及HSL和RGB之间转换的代码的更多信息,请参阅我以前的回答Function for creating color wheels

3

是的,你需要迭代地图中的每种颜色并计算距离。此外,颜色是3D,而std :: map是1D,如果您有很多颜色,则可能需要类似3D kd tree而不是1D地图来进行快速查找。虽然只是迭代几种颜色不会很昂贵。