有没有办法比较两种颜色相互接近的程度?如果说两者都是蓝色的
目前我们比较它们的方法是手动将每种可能的颜色分配给颜色系列(红色,绿色,蓝色......)。然后只是比较字符串:)
但可以肯定的是,手动任务可以分配给一个简洁的小算法。
答案 0 :(得分:22)
您可能希望将颜色转换为HSL模型(色调,饱和度,亮度),然后按照HSL的顺序比较阈值内的值。如果色调在被视为“接近”的容差范围内,则检查饱和度的“接近度”,然后检查亮度。
答案 1 :(得分:9)
我不确定是否有任何算法,您可能需要考虑将RGB(红色,绿色,蓝色)值转换为HSB(色调,饱和度,亮度)。
Hue本质上是“颜色”,因此您可以简单地比较Hue值的接近程度。
答案 2 :(得分:9)
Delta-e是一个单独的数字,表示两种颜色之间的感知“距离”。数字越低,人眼的颜色越相似。
有几种不同的计算方法...... CIE76(又名CIE 1976或dE76)是最受欢迎的。
每个人都以不同的方式处理事物,但在大多数情况下,他们都要求你转换为比RGB更好的(用于比较)颜色模型。
对于CIE76,您基本上只需将颜色转换为LAB颜色空间,然后计算它们之间的3维距离。
维基百科拥有所有公式:http://en.wikipedia.org/wiki/Color_difference
您可以使用在线颜色计算器检查您的工作:
答案 3 :(得分:1)
我知道这个问题已有10岁了,但扩展了Joe Zack的答案:
这是我的Kotlin代码
//Entry point here
//Color must be hexa for example "#829381"
fun calculateColorDistance(colorA: String, colorB: String): Double {
val aColorRGBArray = getColorRGBArray(colorA)
val bColorRGBArray = getColorRGBArray(colorB)
val aColorLAB = getColorLab(aColorRGBArray)
val bColorLAB = getColorLab(bColorRGBArray)
return calculateColorDistance(aColorLAB, bColorLAB)
}
private fun calculateColorDistance(aColorLAB: DoubleArray, bColorLAB: DoubleArray): Double {
val lab = aColorLAB[0] - bColorLAB[0]
val aab = aColorLAB[1] - bColorLAB[1]
val bab = aColorLAB[2] - bColorLAB[2]
val sqrtlab = lab.pow(2)
val sqrtaab = aab.pow(2)
val sqrtbab = bab.pow(2)
val sum = sqrtlab + sqrtaab + sqrtbab
return sqrt(sum)
}
private fun getColorRGBArray(color: String): IntArray {
val cleanColor = color.replace("#", "")
val colorInt = Integer.parseInt(cleanColor, 16)
val r = Color.red(colorInt)
val g = Color.green(colorInt)
val b = Color.blue(colorInt)
return intArrayOf(r, g, b)
}
private fun getColorLab(colorRGB: IntArray): DoubleArray {
val outLab = doubleArrayOf(0.0,0.0,0.0)
ColorUtils.RGBToLAB(colorRGB[0], colorRGB[1], colorRGB[2], outLab)
return outLab
}
calculateColorDistance
将返回一个Double值。该值越低,颜色越相似。
希望这对某人有帮助