如果给你一种RGB形式的颜色,有没有办法以编程方式确定它是否与其他RGB非常不同。
说,我想测试颜色是否至少相距30%,我该怎么做?或者,换句话说,我如何生成与另一种颜色充分不同的颜色?
答案 0 :(得分:7)
[更新]这里显示online calculator显然会为你计算这些差异(它很复杂,链接不会更改网址,因此很难链接到,但如果你点击它可能有意义。 ...)
答案 1 :(得分:2)
这是非常主观的。但是,我个人认为你最好的机会是使用色调 - 饱和度 - 亮度(HSL,或HSV),并尝试从值中获得一个值。例如:
value = a*abs(H1-H2)+b*abs(S1-S2)+c*abs(L1-L2);
并尝试通过反复试验找到最佳a
,b
和c
常数,以区分与人类判断相同数量的颜色。如果您了解线性回归,则可以使用您指定的差异获得一些示例颜色,并使用线性回归获得a
,b
和c
值。
更合适的公式可能包含2的幂次而不是abs
的差异,更重要的是a
,b
和c
的值作为颜色的函数他们自己而不是常数。
答案 2 :(得分:1)
我认为这是与几个小时前的颜色相同的问题,在另一个问题上。在wikipediahttp://en.wikipedia.org/wiki/HSL_and_HSV中阅读有关HSV(或HSL)的信息:当您转换RGB时 - > HSV,H值是颜色,S和V是其他特征。
如果您想知道颜色之间的距离,只需测量H值即可。如果将其转换为360度表示法,30度就足以为您提供非常不同的颜色。
如果你想用RGB颜色知道它,它会变得有点困难:值R,G和B会让你变成浅灰色的“颜色”,而不是一种颜色。
答案 3 :(得分:-1)
将RGB值视为一个点并使用几何中的距离公式。
distance = ( (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2 )^.5
distance > minimun value
在想要30%差异的情况下,使最小值=距离原点的point_1 * .3的距离,即。,(3)((R1)^ 2 +(G1)^ 2 +(B1)^ 2 )^。5