opencv学习系列(二)---颜色识别
2015-01-10 11:37
651 查看
1.利用RGB颜色模型进行颜色识别
核心代码是下面的部分:
2.利用HSI颜色模型进行颜色识别
HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。
色调H(Hue): 与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。
饱和度S(Saturation): 表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。
HSI模型的建立基于两个重要的事实: ① I分量与图像的彩色信息无关;② H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。
RGB单位立方体沿主对角线进行投影,可得到图9-4(a)所示的六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(1,0,0)则位于右边的角上,绿色点(0,1,0)位于左上角,蓝色点(0,0,1) 则位于左下角。
是HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π/3,纯蓝色的角度为4π/3。饱和度S是颜色空间任一点距I轴的距离。当然,若用圆表示RGB模型的投影,则HSI色度空间为双圆锥3D表示。
带来的好处:
1.在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类;
2.HSI模型完全反映了人感知颜色的基本属性,与人感知颜色的结果一一对应,因此,HSI模型被广泛应用于人的视觉系统感知演的的图像表示和处理系统中。
转换公式:
贴出一段代码:
流程图:
核心代码:
具体代码参照博客http://blog.csdn.net/ycc892009/article/details/6516628
核心代码是下面的部分:
2.利用HSI颜色模型进行颜色识别
HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。
色调H(Hue): 与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。
饱和度S(Saturation): 表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
强度I(Intensity): 对应成像亮度和图像灰度,是颜色的明亮程度。
HSI模型的建立基于两个重要的事实: ① I分量与图像的彩色信息无关;② H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。
RGB单位立方体沿主对角线进行投影,可得到图9-4(a)所示的六边形,这样,原来沿主对角线的灰色都投影到中心白色点,而红色点(1,0,0)则位于右边的角上,绿色点(0,1,0)位于左上角,蓝色点(0,0,1) 则位于左下角。
是HSI颜色模型的双六棱锥表示,I是强度轴,色调H的角度范围为[0,2π],其中,纯红色的角度为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
相关文章推荐
- opencv颜色识别学习总结
- 【OpenCV学习笔记】三十一、轮廓特征属性及应用(八)——颜色物体识别与跟踪
- 学习OpenCV:滤镜系列(3)——颜色变幻
- 学习OpenCV:滤镜系列(3)——颜色变幻
- OpenCV学习 物体检测 人脸识别 填充颜色
- 【opencv学习笔记】2用摄像头识别指定颜色
- C# OpenCV学习笔记六之人脸识别/五官识别测试
- 像素临近区域、颜色通道、ROI区域的访问---opencv.2学习笔记2
- OpenCV学习笔记(二十)——手势识别
- 【OpenCV学习】利用HandVu进行手部动作识别分析
- [转]Ultra Fractal教程系列17——学习基础技巧09——同步颜色并保存图案
- 学习OpenCV:滤镜系列(6)——风
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示(转)
- opencv学习系列1 opencv+vs2008安装
- 学习OpenCV:滤镜系列(8)——素描
- 学习OpenCV:滤镜系列(4)——波浪:正弦
- 学习Opencv, 人脸识别, 图片来自百度
- Opencv学习(人脸识别)
- 跟着小王学习wpf系列三 颜色和画刷
- OpenCV学习笔记(五十五)——用OpenCV做人脸识别和性别识别contrib