OpenCV颜色空间——HLS颜色空间
引自: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); }
转载于:https://www.cnblogs.com/Anita9002/p/7156437.html
OpenCV颜色空间——HLS颜色空间相关推荐
- OpenCV基础(7)OpenCV中的颜色空间
在本教程中,我们将学习计算机视觉中常用的颜色空间,并使用它进行基于颜色的分割.我们还将共享c++和Python的演示代码. 我们在许多计算机视觉应用中都遇到了这个问题,包括肤色检测.交通灯识别等基于颜 ...
- opencv学习_7 (颜色空间)
这次我主要说说颜色空间,包括三个方面:RGB颜色空间,HSV颜色空间以及颜色空间的转换 RGB颜色空间介绍: 1:RGB颜色空间简介 三基色原理:大多数的颜色可以通过红.绿.蓝<数学中基的概念& ...
- 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图
一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
核心的转换公式: RGB-->HSI 截图来自中科院刘定生老师的<数字图像处理与分析>课件. HSI-->RGB 具体的数学公式参照冈萨雷斯版<数字图像处理(第三版)&g ...
- OpenCV进阶--图像颜色空间
一.颜色模型与转换 1.1RGB颜色模型 RGB颜色空间模型: 该模型的命名方式是采用三种颜色的英文首字母,分别是红色,绿色,和蓝色.在RGB模型中所有的颜色都是这三种颜色通过不同比例的混合模型,如果 ...
- OpenCV颜色空间——Lab颜色空间
对于Lab颜色空间,OpenCV同样实现了BGR和Lab之间的转换,如果BGR的值在[0,1]之间,那么转换为Lab的取值范围为: ,, 通过以下程序调节L分量,观察其效果: #include< ...
- python中使用opencv的HSV颜色空间提取物体
HSV H:hue 色相(0-360),红绿蓝 S:saturation饱和度(0-100),形容颜色的深浅,如浅红.大红.深红 V:value色调(0-100),色彩的亮度 但是HSV颜色空间却规定 ...
- OpenCV通过HSV颜色空间过滤图片及目标检测颜色空间范围确定
在目标检测中,我们可以通过卷积网络进行目标检测,但实际上,卷积网络并不能完全正确.所以,我们可以通过其它方式进行筛选,比如颜色空间 参考: Image Segmentation Using Color ...
- OpenCV颜色空间——Luv颜色空间
Luv颜色空间,三个值的取值范围: ,, 调节L分量: #include<opencv2/core.hpp> #include<opencv2/imgproc.hpp> #in ...
- 【OpenCV】Lab颜色空间
一.Lab颜色空间概念 Lab是一种色彩空间,也即一种颜色模型,是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立的,在1976年又经修订并被命名为CIELab.它包括人眼所能看 ...
最新文章
- 1014 装箱问题 CODE[VS]
- mysql session 最大值_session 存储最大值
- DOS命令(系统错误5,拒绝访问)的解决方法
- Hdu 1384 Intervals
- python 可变参数传递
- 61 MM配置-后勤发票校验-发票冻结-设置容差限制
- Pycharm代码格式化快捷键及其设置方法
- 创业期的软件开发管理(二)
- python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
- Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
- 【待填坑】LG_3239_[HNOI2015]亚瑟王
- uva_816 Abbott's Revenge(BFS求解最短路、结点状态由坐标和方向表示)
- 网络舆情监测系统学习笔记——GIT的…
- 输出一行数字,中间用空格隔开,最后一个数字没有空格
- 继电保护原理7-母线保护
- OMNeT++理论算法仿真详述
- 钩稽“及其在VE中的实现
- 观众关注人数超4万,CIOE信息通信展热度持续高涨
- 实现个虚拟机只要几百行的 toy 版就够了
- 推荐学英语的电影及电视剧
热门文章
- ACM PKU 1251 Jungle Roads http://poj.org/problem?id=1251
- 对文件、字符串和byte数组进行MD5加密
- sql server怎么设置id字段自增
- extern C的思考
- Visual Studio 添加外部工具
- 几种常见的程序命名规则
- 16. 反转链表(C++版本)
- 06. 当心C++编译器最烦人的分析机制
- 链表常见算法题总结(Java)
- PHP导航栏管理,zblog导航栏管理设置的几种方法