引自:http://blog.csdn.net/zhangping1987/article/details/73699335

HLS颜色模型

HLS颜色空间,三个分量分别是色相(H)、亮度(L)、饱和度(S),这三个分量进行数字化处理,取值范围为:

模型可以通过以下两幅图像理解(来自维基百科)

         

调节L分量,观察效果

从上图种可以看出,我们固定一个颜色(H),那么随着饱和度(S,Chroma)的增加,颜色越来越深,OpenCV通过定义函数cvtColor实现BGR颜色空间向HLS颜色空间的转换,使用该函数时,最好将输入图像的BGR值归一到[0,1]范围,可以通过调节亮度(L分量)观察L造成的影响:

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
//颜色显示
Mat colorMap;
//H的取值范围[0,360]
int H = 180;
int MAX_H = 360;
//L的取值范围[0,1]
int L = 0;
int MAX_L = 255;//可以自定义设定
//S的取值范围[0,1]
int S = 0;
int MAX_S = 255;
//颜色显示窗口
string showColor = "H-S";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{colorMap.create(Size(MAX_S + 1, MAX_H + 1), CV_32FC3);//命名窗口
    namedWindow(showColor, WINDOW_GUI_EXPANDED);//调节 V 分量createTrackbar("L分量", showColor, &L, MAX_L, callback);waitKey(0);return 0;
}
void callback(int, void*)
{for (int h = 0; h < MAX_H + 1; h++){for (int s = 0; s < MAX_S + 1; s++){colorMap.at<Vec3f>(h, s) = Vec3f(h, L / float(MAX_L), s / float(MAX_S));}}//颜色空间的转换
    cvtColor(colorMap, colorMap, COLOR_HLS2BGR);//显示颜色
    imshow(showColor, colorMap);
}

上述程序的运行界面如下,通过调节L分量,观察其效果:

 

可以发现随着L的增大,所有的颜色逐渐消失,显示为白色,符合模型。

调节S分量观察其效果

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
//颜色显示
Mat colorMap;
//H的取值范围[0,360]
int H = 180;
int MAX_H = 360;
//L的取值范围[0,1]
int L = 0;
int MAX_L = 255;//可以自定义设定
//S的取值范围[0,1]
int S = 0;
int MAX_S = 255;
//颜色显示窗口
string showColor = "H-L";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{colorMap.create(Size(MAX_L + 1, MAX_H + 1), CV_32FC3);//命名窗口
    namedWindow(showColor, WINDOW_GUI_EXPANDED);//调节 V 分量createTrackbar("S分量", showColor, &S, MAX_S, callback);waitKey(0);return 0;
}
void callback(int, void*)
{for (int h = 0; h < MAX_H + 1; h++){for (int l = 0; l < MAX_L + 1; l++){colorMap.at<Vec3f>(h, l) = Vec3f(h, l / float(MAX_L), S / float(MAX_S));}}//颜色空间的转换
    cvtColor(colorMap, colorMap, COLOR_HLS2BGR);//显示颜色
    imshow(showColor, colorMap);
}

运行结果如下:

  

可以发现S很小时,几乎看不到颜色,随着S的增大,颜色信息也越来越明显。

通过上面显示的图谱可以看出,可以通过分割H分量,确定颜色。

调节H分量

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
//颜色显示
Mat colorMap;
//H的取值范围[0,360]
int H = 180;
int MAX_H = 360;
//L的取值范围[0,1]
int L = 0;
int MAX_L = 255;//可以自定义设定
//S的取值范围[0,1]
int S = 0;
int MAX_S = 255;
//颜色显示窗口
string showColor = "L-S";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{colorMap.create(Size(MAX_S + 1, MAX_L + 1), CV_32FC3);//命名窗口
    namedWindow(showColor, WINDOW_GUI_EXPANDED);//调节 H 分量createTrackbar("H分量", showColor, &H, MAX_H, callback);callback(0, 0);waitKey(0);return 0;
}
void callback(int, void*)
{for (int l = 0; l < MAX_L + 1; l++){for (int s = 0; s < MAX_S + 1; s++){colorMap.at<Vec3f>(l, s) = Vec3f(H, l / float(MAX_L), s / float(MAX_S));}}//颜色空间的转换
    cvtColor(colorMap, colorMap, COLOR_HLS2BGR);//显示颜色
    imshow(showColor, colorMap);
}

效果如下:
  
观察到L很大或者很小时,H的变换颜色值的变化非常小

转载于:https://www.cnblogs.com/Anita9002/p/7156437.html

OpenCV颜色空间——HLS颜色空间相关推荐

  1. OpenCV基础(7)OpenCV中的颜色空间

    在本教程中,我们将学习计算机视觉中常用的颜色空间,并使用它进行基于颜色的分割.我们还将共享c++和Python的演示代码. 我们在许多计算机视觉应用中都遇到了这个问题,包括肤色检测.交通灯识别等基于颜 ...

  2. opencv学习_7 (颜色空间)

    这次我主要说说颜色空间,包括三个方面:RGB颜色空间,HSV颜色空间以及颜色空间的转换 RGB颜色空间介绍: 1:RGB颜色空间简介 三基色原理:大多数的颜色可以通过红.绿.蓝<数学中基的概念& ...

  3. 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

    一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...

  4. OpenCV实现RGB颜色空间和HSI颜色空间的相互转换

    核心的转换公式: RGB-->HSI 截图来自中科院刘定生老师的<数字图像处理与分析>课件. HSI-->RGB 具体的数学公式参照冈萨雷斯版<数字图像处理(第三版)&g ...

  5. OpenCV进阶--图像颜色空间

    一.颜色模型与转换 1.1RGB颜色模型 RGB颜色空间模型: 该模型的命名方式是采用三种颜色的英文首字母,分别是红色,绿色,和蓝色.在RGB模型中所有的颜色都是这三种颜色通过不同比例的混合模型,如果 ...

  6. OpenCV颜色空间——Lab颜色空间

    对于Lab颜色空间,OpenCV同样实现了BGR和Lab之间的转换,如果BGR的值在[0,1]之间,那么转换为Lab的取值范围为: ,, 通过以下程序调节L分量,观察其效果: #include< ...

  7. python中使用opencv的HSV颜色空间提取物体

    HSV H:hue 色相(0-360),红绿蓝 S:saturation饱和度(0-100),形容颜色的深浅,如浅红.大红.深红 V:value色调(0-100),色彩的亮度 但是HSV颜色空间却规定 ...

  8. OpenCV通过HSV颜色空间过滤图片及目标检测颜色空间范围确定

    在目标检测中,我们可以通过卷积网络进行目标检测,但实际上,卷积网络并不能完全正确.所以,我们可以通过其它方式进行筛选,比如颜色空间 参考: Image Segmentation Using Color ...

  9. OpenCV颜色空间——Luv颜色空间

    Luv颜色空间,三个值的取值范围: ,, 调节L分量: #include<opencv2/core.hpp> #include<opencv2/imgproc.hpp> #in ...

  10. 【OpenCV】Lab颜色空间

    一.Lab颜色空间概念 Lab是一种色彩空间,也即一种颜色模型,是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立的,在1976年又经修订并被命名为CIELab.它包括人眼所能看 ...

最新文章

  1. 1014 装箱问题 CODE[VS]
  2. mysql session 最大值_session 存储最大值
  3. DOS命令(系统错误5,拒绝访问)的解决方法
  4. Hdu 1384 Intervals
  5. python 可变参数传递
  6. 61 MM配置-后勤发票校验-发票冻结-设置容差限制
  7. Pycharm代码格式化快捷键及其设置方法
  8. 创业期的软件开发管理(二)
  9. python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
  10. Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
  11. 【待填坑】LG_3239_[HNOI2015]亚瑟王
  12. uva_816 Abbott's Revenge(BFS求解最短路、结点状态由坐标和方向表示)
  13. 网络舆情监测系统学习笔记——GIT的…
  14. 输出一行数字,中间用空格隔开,最后一个数字没有空格
  15. 继电保护原理7-母线保护
  16. OMNeT++理论算法仿真详述
  17. 钩稽“及其在VE中的实现
  18. 观众关注人数超4万,CIOE信息通信展热度持续高涨
  19. 实现个虚拟机只要几百行的 toy 版就够了
  20. 推荐学英语的电影及电视剧

热门文章

  1. ACM PKU 1251 Jungle Roads http://poj.org/problem?id=1251
  2. 对文件、字符串和byte数组进行MD5加密
  3. sql server怎么设置id字段自增
  4. extern C的思考
  5. Visual Studio 添加外部工具
  6. 几种常见的程序命名规则
  7. 16. 反转链表(C++版本)
  8. 06. 当心C++编译器最烦人的分析机制
  9. 链表常见算法题总结(Java)
  10. PHP导航栏管理,zblog导航栏管理设置的几种方法