首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定某一颜色更接近白色还是黑色?

如何确定某一颜色更接近白色还是黑色?
EN

Stack Overflow用户
提问于 2012-03-20 02:28:58
回答 4查看 16.5K关注 0票数 23

我正在处理图像,并想确定一组像素是更接近白色还是黑色。

因此,给定一组colors/pixles,,如何确定它们是否更接近于白色或黑色?

我试过一些低俗的算法,有人知道我怎么做到的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-20 02:38:03

我想说的是,你可以先把颜色转换成灰度,然后检查它是接近黑色还是接近白色。

首先,通过以下公式转换RGB颜色值以计算亮度

代码语言:javascript
运行
复制
Y = 0.2126*R + 0.7152*G + 0.0722*B

然后检查该值是否接近0或255,并相应地选择黑色或白色。

代码语言:javascript
运行
复制
color c = Y < 128 ? black : white

请注意,如果颜色空间没有被伽马压缩,那么你必须在计算亮度之前增加一个步骤,这是一个伽马展开式,计算Y,然后执行伽马压缩,得到一个非线性亮度值,然后你可以用它来判断颜色是接近黑色还是白色。

票数 41
EN

Stack Overflow用户

发布于 2012-03-20 02:33:20

看看YCbCr。由于Java和大多数计算机以RGB格式处理颜色,因此需要从RGB到YCbCr进行一些转换。有许多公式可以将RGB转换为YCbCr。

获得YCbCr值后,可以检查亮度值(YCbCr中的值Y)。

票数 4
EN

Stack Overflow用户

发布于 2012-03-20 03:16:37

白色和黑色有两个潜在的含义:

  • 可见光颜色光谱
  • 由种族、肤色等决定的人类肤色。

前者很简单:转换为0-255的灰度范围。127或更少接近黑色(0),128或以上更接近白色(255)。

我使用以下函数使用亮度值(假设输入颜色采用int ARGB格式)转换为灰度:

代码语言:javascript
运行
复制
public static int getLuminance(int argb) {
    int lum= (   77  * ((argb>>16)&255) 
               + 150 * ((argb>>8)&255) 
               + 29  * ((argb)&255))>>8;
    return lum;
}

后一定义(人类肤色)是不可能用一个简单的算法,因为它取决于光照条件,相机设置,曝光等。在典型情况下,RGB vlaue (190,115,60)大概是中点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9780632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档