RGB color space to raw color name mapping(RGB颜色空间到原始颜色名称的映射)
问题描述
给定不同的RGB三联体(例如,[255,255,255]或[1,2,3]),我想将其映射到一组固定的颜色(红色、蓝色、绿色、黑色、白色、黄色、粉色、紫色、米色、棕色、橙色、灰色)。举个例子,当我给出"0,0,0"时,黑色应该是映射的输出。同样,灰色代表"190,190,190"。地图的值将采用上面定义的枚举颜色(共12种)。 使用固定的颜色集维护反向映射,并使用地图的所有元素计算每个新的RGB三元组的平方差是一种方法,但这种方法的结果并不是很好。结果不佳的原因可能是我们选择的12种颜色在颜色空间中分布不均匀(但不确定:)。
此数据将进一步用于群集。
有没有库(最好是Java/C++或OpenCV)或网站可以执行类似的任务,我可以利用它?
提前谢谢!
推荐答案
首先使用
Map1: colourname->Colourvalue
example: "black" -> (255,255,255), "blue" -> (0,0,255)
Map2: Colourvalue->colourname
example: (255,255,255) -> "black", (0,0,255) -> "blue"
如果您获得一个值的颜色(0,10,240)
,您希望检查map2中的哪些已知条目也是最接近的。
因此,如果颜色的距离大致相等(否则请参见底部),则计算欧几里得距离,得到类似
的结果dist((0,10,240), (0,0,255)) ~ 20 (number guessed)
dist((0,10,240), (255,255,255)) ~ 20000 (number guessed)
并且您知道您的颜色值(0,10,240)
应映射到"蓝色"。
要记住的几件事:
您可能需要查看不同的颜色空间。我建议使用实验室的色彩空间,它的设计是为了使距离与人类体验世界的方式相似。
签出XKCD Colour Survey。如果您只使用RGB,您甚至可以存储所有颜色到其正确名称的静态映射。如果奥尤有足够的空间,你会有一个即时查找。(为了节省空间,使用来自[r,g,b]->char的三维数组,并根据您的char查找颜色名称)
编辑:您必须检查颜色之间的距离是否大致相等。否则,有些颜色可能会曝光量过大。(例如,在xkcd颜色图表中,一些颜色,如深棕色,只有微小的区域,而其他颜色则非常大。
这篇关于RGB颜色空间到原始颜色名称的映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:RGB颜色空间到原始颜色名称的映射


基础教程推荐
- Java 实例变量在两个语句中声明和初始化 2022-01-01
- 大摇大摆的枚举 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- 从 python 访问 JVM 2022-01-01
- Java Swing计时器未清除 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
- 多个组件的复杂布局 2022-01-01