V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ksc010
V2EX  ›  问与答

知道一个颜色的 RGB 如何归类到特定颜色(如赤橙黄绿青蓝紫黑白灰)?

  •  
  •   ksc010 · 2014-12-11 17:01:03 +08:00 · 7634 次点击
    这是一个创建于 3664 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在google找到的资料是
    先转换为HSV(这样容易一下),然后根据颜色范围表做匹配

    http://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4 #HSL和HSV色彩空间
    http://bbs.csdn.net/topics/390181776 #如何根据给定图像的像素(颜色)值,判断此像素是何种颜色?
    http://blog.csdn.net/wanggsx918/article/details/23272669 #HSV颜色模型及颜色分量范围
    13 条回复    2014-12-11 20:09:33 +08:00
    BGLL
        1
    BGLL  
       2014-12-11 17:43:06 +08:00   ❤️ 1
    楼主自己不是都给出答案了吗
    根据S(饱和度)判断是否是灰、白、黑
    根据H(色相)判断是什么颜色:赤橙黄绿青蓝紫
    再看L(亮度)判断一下非纯色,比如棕色
    staticor
        2
    staticor  
       2014-12-11 17:43:32 +08:00   ❤️ 1
    找出每个颜色的 Rgb三元组质心 然后计算 未知RGB 到几个质心的距离 最近者归此类。

    难点:
    距离规制的选取
    质心的计算
    BGLL
        3
    BGLL  
       2014-12-11 17:47:35 +08:00   ❤️ 1
    @staticor 何苦再RGB下自找麻烦呢...
    换成HSL不简单多了
    ksc010
        4
    ksc010  
    OP
       2014-12-11 17:48:46 +08:00
    @BGLL
    现在就是不知道有没有公开的范围表之类的
    rock_cloud
        5
    rock_cloud  
       2014-12-11 17:49:59 +08:00
    @BGLL
    饱和度不是用来衡量纯度的么?
    亮度用来判断灰白黑吧?
    BGLL
        6
    BGLL  
       2014-12-11 18:01:36 +08:00   ❤️ 1
    @ksc010
    色相:
    221-239 红
    0-15 红
    26-30 橙色
    31-40 黄
    41-60 绿(嫩绿)
    61-100绿(正绿)
    101-110 青
    111-120 蓝(海蓝)
    121-170 蓝(正蓝)
    171-200 紫
    201-220 红(洋红)
    BGLL
        7
    BGLL  
       2014-12-11 18:08:00 +08:00
    @rock_cloud
    呃,是我写的不准确,
    不过亮度只能判断白黑,不能判断灰色,亮度跟色彩无关
    准确应该是饱和度判断灰度,饱和度越低色彩越淡,为0就是没有色彩,加上亮度判断黑白
    BGLL
        8
    BGLL  
       2014-12-11 18:08:52 +08:00
    ksc010
        9
    ksc010  
    OP
       2014-12-11 18:09:23 +08:00
    @BGLL 嗯 多谢
    rock_cloud
        10
    rock_cloud  
       2014-12-11 18:13:02 +08:00
    @BGLL 对对对,饱和度为0时看亮度,亮度在中间部分就是灰色了。
    staticor
        11
    staticor  
       2014-12-11 18:29:08 +08:00
    @BGLL 其实我也不懂什么是RGB 不过应该就是三个维度

    我稍稍看了下HSL\HSV 的wiki, 大意是将原来的三维色彩空间 (0,255) ^3 进行压缩, 即-

    将一个空间分类问题尽可能的压缩到一个二维平面(甚至一维直线上) 进行分类。


    所以我再原来基础上做个improvement

    @ksc010

    找到一个坐标变换函数 例如 Function = rsg - > hsv

    进行数据降维, 然后得到新的input数据。

    找出每个类别在新坐标系下的质心 然后计算 未知预测RGB 到几个质心的距离 最近者归此类。

    难点:

    距离规制的选取
    质心的计算

    hsv, hsl 由于已经成型, 所以变换函数应该不难找到
    Daniel65536
        12
    Daniel65536  
       2014-12-11 19:21:15 +08:00 via iPhone
    太学术了,我给个简单的答案吧:

    http://www.guokr.com/article/437666/?page=2

    以上是一次大范围调查后得到的结果,总计222,500位用户人次共计命名了超过500万种颜色。
    通过这些数据,原作者计算出了各种颜色之间的分界线,并提供了关于每一个rgb值属于红黄蓝绿等基本颜色中的哪一个的表格。
    BGLL
        13
    BGLL  
       2014-12-11 20:09:33 +08:00
    @staticor 通过公式直接把RGB转换成HSV后,H的值就已经是色相,也就是颜色了。而且是连续的,划出各颜色的取值范围就行了。还降维干什么,不需要空间分类啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5466 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:15 · PVG 15:15 · LAX 23:15 · JFK 02:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.