从std :: map中选择最近的RGB颜色

时间:2010-11-13 21:08:48

标签: c++ stl colors rgb

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

对于这种类型或工作,RGB是一种非常不令人满意的颜色测量(虽然它便于控制硬件)很多人建议使用HSL系统,它允许你设置亮度独立于'颜色',这是应该更接近地对应人类对颜色的反应。

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

相关问题