我正在处理图像,并想确定一组像素是更接近白色还是黑色。
因此,给定一组colors/pixles,,如何确定它们是否更接近于白色或黑色?
我试过一些低俗的算法,有人知道我怎么做到的吗?
发布于 2012-03-20 02:38:03
我想说的是,你可以先把颜色转换成灰度,然后检查它是接近黑色还是接近白色。
首先,通过以下公式转换RGB颜色值以计算亮度
Y = 0.2126*R + 0.7152*G + 0.0722*B
然后检查该值是否接近0或255,并相应地选择黑色或白色。
color c = Y < 128 ? black : white
请注意,如果颜色空间没有被伽马压缩,那么你必须在计算亮度之前增加一个步骤,这是一个伽马展开式,计算Y,然后执行伽马压缩,得到一个非线性亮度值,然后你可以用它来判断颜色是接近黑色还是白色。
发布于 2012-03-20 02:33:20
看看YCbCr。由于Java和大多数计算机以RGB格式处理颜色,因此需要从RGB到YCbCr进行一些转换。有许多公式可以将RGB转换为YCbCr。
获得YCbCr值后,可以检查亮度值(YCbCr中的值Y)。
发布于 2012-03-20 03:16:37
白色和黑色有两个潜在的含义:
前者很简单:转换为0-255的灰度范围。127或更少接近黑色(0),128或以上更接近白色(255)。
我使用以下函数使用亮度值(假设输入颜色采用int ARGB格式)转换为灰度:
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)大概是中点。
https://stackoverflow.com/questions/9780632
复制相似问题