opencv学习系列(二)---颜色识别

来源:互联网 发布:知乎电脑客户端下载 编辑:程序博客网 时间:2024/05/16 02:41

1.利用RGB颜色模型进行颜色识别

核心代码是下面的部分:

2.利用HSI颜色模型进行颜色识别

HSI模型是美国色彩学家孟塞尔(H.A.Munseu)1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。

色调H(Hue): 与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。

饱和度S(Saturation): 表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。

强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。

HSI模型的建立基于两个重要的事实: ① I分量与图像的彩色信息无关;② HS分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。

RGB单位立方体沿主对角线进行投影,可得到图9-4(a)所示的六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(100)则位于右边的角上,绿色点(010)位于左上角,蓝色点(001) 则位于左下角。

HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[02π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。饱和度S是颜色空间任一点距I轴的距离。当然,若用圆表示RGB模型的投影,则HSI色度空间为双圆锥3D表示。



带来的好处:

         1.在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类;

         2.HSI模型完全反映了人感知颜色的基本属性,与人感知颜色的结果一一对应,因此,HSI模型被广泛应用于人的视觉系统感知演的的图像表示和处理系统中。

转换公式:

    

 

贴出一段代码:

inline double* colordetect::rgb2hsi( double rgb[3] ){    double* hsi = new double[3], theta;    double r = rgb[0] / 255.0;    double g = rgb[1] / 255.0;    double b = rgb[2] / 255.0;    if(( r == 0) &&( g == 0 )& (b == 0) )        hsi[2] = hsi[1] = hsi[0] = 0;    else{        theta = 0.5 * ((r-g) + (r-b)) / sqrt((r-g)*(r-g) + (r-b)*(g-b));        theta = ((theta > 1) ? 1 : theta);        theta = ((theta < -1) ? -1 : theta);        if( b <= g )            hsi[0] = acos( theta ) / (2 * PI);        else            hsi[0] = 1 - acos( theta ) / (2 * PI);        hsi[1] = 1 - 3.0 * MIN( MIN(r,g), b ) / ( r + g + b );        hsi[2] = ( r + g + b ) / 3.0;        hsi[1] = ( (hsi[1] < 0) ? 0 : hsi[1] );        hsi[0] = ( (hsi[1] == 0) ? 0 : hsi[0] );        hsi[2] = ( (hsi[2] < 0) ? 0 : hsi[2] );    }    return hsi;}

流程图:

核心代码:


  

具体代码参照博客http://blog.csdn.net/ycc892009/article/details/6516628



0 0
原创粉丝点击