在Android中将任何颜色代码转换为最接近的人类颜色[重复]

Posted

技术标签:

【中文标题】在Android中将任何颜色代码转换为最接近的人类颜色[重复]【英文标题】:Convert Any Color Code to nearest human Color in Android [duplicate] 【发布时间】:2015-08-10 12:05:34 【问题描述】:

我将编写一个 android 应用程序,该应用程序将使用实时相机预览或使用相机捕获的图像检测任何纯色背景图像的颜色。

我可以将 rgb/hex 值颜色转换为我已经在特定列表中定义的最接近的颜色名称吗?假设我在列表中定义了 10 种众所周知的颜色。一旦我确定了任何颜色的十六进制代码,我需要从我拥有的列表中找到它最接近的颜色。

如何使用高效快速的算法来做到这一点? android palette class 中是否有任何 API 可以做同样的事情?

谢谢

【问题讨论】:

为什么要投反对票?这个问题比我之前的问题更具体。 上一个问题包含关于使用实时摄像头进行颜色代码检测的问题。 “最接近”的定义是什么?亮度接近,色彩接近,饱和度接近?请注意,这取决于文化。非洲的一些人无法区分绿色和棕色,因为对他们来说,这两种颜色都被称为“大地色”。不幸的是,我现在找不到视频。但是请参阅en.wikipedia.org/wiki/Checker_shadow_illusion 为什么深灰色!= 浅灰色。 @Thomas Closest 表示在预定义列表中的十六进制代码中关闭。 所以FF0000FE0000 的距离为100000000FF0000FE 的距离为1?当然不是。如果你思考你的问题,你很快就会找到算法。 【参考方案1】:

我可能建议只计算到所有预定义颜色的距离,然后选择最接近的颜色。您可以尝试定义 color1(r1, g1, b1) 和 color2(r2, g2, b2) 之间的距离,如下所示:|color1 - color2| = sqrt(sqr(r1-r2) + sqr(g1 - g2) + sqr(b2 - b1))。如果您有大约 1000 种预定义颜色,即使对于线性搜索,它也会非常快速地工作。你也可以用谷歌搜索更好的距离函数来解决这个问题。

【讨论】:

以上是关于在Android中将任何颜色代码转换为最接近的人类颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将非 ASCII 字符(变音符号、重音符号...)转换为最接近的 ASCII 等效字符(创建 slug)

如何在 Android Java 中将 Color.RED 代码转换为颜色的整数值? [复制]

如何将(round)纪元时间转换为最接近的小时和日期wrt IST(在Java中)

如何在 Android 中将颜色整数转换为十六进制字符串?

在 Python 中将十六进制颜色代码转换为颜色名称

四舍五入正确到小数点后 2 位,但如果非常接近,则将其设置为最接近的整数