我想对位图的灰度值做二值化处理,请问在vc中如何获取灰度值?

解决方案 »

  1.   

    实际上, 表示颜色有两种理论模型, 除了计算机上直接使用的 RGB 外, 还有一种 HSL 模型. 如果是着重描述光线强弱关系的话, 当然应该使用 HSL 模型. 光线的颜色是由不同波长的单色光混合起来的, 如果将各种颜色的单色光线从兰色到红色排出来, 肉眼感受到的特定颜色的光, 应该是其中的一段. Hue Stauration Lightness 模型中, Lightness 是完全控制的亮度的. 而在 RGB 模型中, 亮度实际是和 R,G,B 的最大值有关的. 采用 24bit 表示法, 就是说 FF0000 和 00FF00 0000FF FFFFFF 都是一样亮的. (想想显示器的显示 R G B 的色素的互不影响亮度, 不是吗?) 人眼觉察到的亮度实际就是 R G B 中的最大值 Stauration 纯度, 从我的理解, 当色彩纯度为0 时, 应该是白色光. 物理上看就是各种波长的光都混在一起了. 当然就非常不纯了 ;-) 如果光线非常纯, 那就是单一波长的光了. 那么 S 值是一个真分数, 在0~1 间. 由上面的定义可以得出:     S=(max-min)/max
    其中: max 是 RGB 中最大的数值, min 是 RGB 中最小的数值.最后来看 Hue 色度, 如果将可见光的兰色到红色排成一个色环. 实际Hue指出了某种光在环中的位置. (一种特定颜色的光应该是色环的一段弧. S 是这个弧的圆心角度) R G B 就正好处于色环的三个互成 120 度的位置. H 值应该是一个角度值, 这里我们可以看最亮的色素是哪个而得出 H 值偏向哪一段. (当 S =0 时, H 无意义) 下面给出简单的公式    if R = max, H = (G-B)/(max-min)
       if G = max, H = 2 + (B-R)/(max-min)
       if B = max, H = 4 + (R-G)/(max-min)   H = H*60
       if H < 0, H = H + 360这里 L 是一个无上限的整数, H 是一个角度值, S 是一个 0~ 1 间的小数. 并不适合在计算机中处理. 我想 YUV 就是HSL 模型的一种形式吧. 按我的理解, Y 值和 U 值应该是描述上述的那段表示色彩的圆弧在色环中的开始与终止位置吧.