OpenCV颜色空间——HLS颜色空间
来源:互联网 发布:停车场车牌识别算法 编辑:程序博客网 时间:2024/05/16 11:43
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的变换颜色值的变化非常小
阅读全文
1 0
- OpenCV颜色空间——HLS颜色空间
- OpenCV颜色空间——HSV颜色空间
- OpenCV颜色空间——Lab颜色空间
- OpenCV颜色空间——Luv颜色空间
- OpenCV——颜色空间转换
- 【OpenCV】Lab颜色空间
- opencv颜色空间转换
- opencv颜色空间转换
- opencv颜色空间转换
- OpenCV Using Python——RGB颜色空间和YCbCr颜色空间的混合肤色检测
- OpenCV HSV颜色空间基本颜色范围
- opencv——实现BGR到HSV颜色空间转换
- opencv学习_7 (颜色空间)
- OpenCV中HSV颜色空间
- OpenCv实现 颜色空间缩减
- opencv学习_7 (颜色空间)
- opencv图像颜色空间转换
- Python-OpenCV颜色空间转换
- CentOS yum install Another app is currently holding the yum lock解决方法
- 初学者到编程高手
- To yourself
- 反编译apk出现Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec错误
- C语言中scanf(),sscanf(),fscanf()的用法和区别
- OpenCV颜色空间——HLS颜色空间
- 浅谈程序设计
- spring-aop配置多切面
- VS/MFC实例:对话框--为对话框添加控件
- 最小生成树(普利姆算法、克鲁斯卡尔算法)
- JKS导出的P12无法导入keychain或转换成pem问题:Error outputting keys and certificates
- 关于Lisp采用波兰式的一些想法
- 数学算法:poweroj1026-丑数(根据固定倍数得到从小到大的序列)
- 我与Linux系统