引自: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 = ;
int MAX_H = ;
//L的取值范围[0,1]
int L = ;
int MAX_L = ;//可以自定义设定
//S的取值范围[0,1]
int S = ;
int MAX_S = ;
//颜色显示窗口
string showColor = "H-S";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{
colorMap.create(Size(MAX_S + , MAX_H + ), CV_32FC3);
//命名窗口
namedWindow(showColor, WINDOW_GUI_EXPANDED);
//调节 V 分量
createTrackbar("L分量", showColor, &L, MAX_L, callback);
waitKey();
return ;
}
void callback(int, void*)
{
for (int h = ; h < MAX_H + ; h++)
{
for (int s = ; s < MAX_S + ; 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 = ;
int MAX_H = ;
//L的取值范围[0,1]
int L = ;
int MAX_L = ;//可以自定义设定
//S的取值范围[0,1]
int S = ;
int MAX_S = ;
//颜色显示窗口
string showColor = "H-L";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{
colorMap.create(Size(MAX_L + , MAX_H + ), CV_32FC3);
//命名窗口
namedWindow(showColor, WINDOW_GUI_EXPANDED);
//调节 V 分量
createTrackbar("S分量", showColor, &S, MAX_S, callback);
waitKey();
return ;
}
void callback(int, void*)
{
for (int h = ; h < MAX_H + ; h++)
{
for (int l = ; l < MAX_L + ; 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 = ;
int MAX_H = ;
//L的取值范围[0,1]
int L = ;
int MAX_L = ;//可以自定义设定
//S的取值范围[0,1]
int S = ;
int MAX_S = ;
//颜色显示窗口
string showColor = "L-S";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{
colorMap.create(Size(MAX_S + , MAX_L + ), CV_32FC3);
//命名窗口
namedWindow(showColor, WINDOW_GUI_EXPANDED);
//调节 H 分量
createTrackbar("H分量", showColor, &H, MAX_H, callback);
callback(, );
waitKey();
return ;
}
void callback(int, void*)
{
for (int l = ; l < MAX_L + ; l++)
{
for (int s = ; s < MAX_S + ; 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的变换颜色值的变化非常小

OpenCV颜色空间——HLS颜色空间的更多相关文章

  1. opencv学习笔记——颜色空间转换函数cv::cvtColor详解

    cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...

  2. OpenCV 学习笔记(10)HSV颜色空间及颜色空间转换(RGB-HSV)

    1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 H ...

  3. OpenCV:图像的颜色空间转换

    导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) ...

  4. HSV 和 HLS颜色空间

    颜色空间 颜色空间是特定的颜色组织:它提供了将颜色分类,并以数字图像表示的方法. RGB 是红绿蓝颜色空间.你可以将其视为 3D 空间,在这种情况下是立方体,其中任何颜色都可以用 R.G 和 B 值的 ...

  5. OpenCV里的颜色空间

    RGB三原色组合方式是最常用的 RGB色彩空间: R:红色分量 G:绿色分量 B:蓝色分量 HSV色彩空间: H - 色调(主波长). S - 饱和度(纯度/色调). V - 明度(强度). LAB色 ...

  6. opencv:基于颜色空间的肤色检测方法

    参考链接:https://www.cnblogs.com/skyfsm/p/7868877.html

  7. OpenCV学习(1) RGB颜色空间

    1.1彩色空间 颜色是外来的光刺激作用于人的视觉器官而产生的主观感觉,它具有色调.饱和度和亮度三个特性.物体的颜色不仅取决于物体本身,还与光源.周围环境的颜色,以及观察者的视觉系统有关 1.1.1颜色 ...

  8. Python-OpenCV中图像颜色空间转换

    目录 cv2.cvtColor() 1. RGB to GRAY 2. RGB to CIE XYZ 3. RGB to YCrCb JPEG 4. RGB to HSV 5. RGB to HLS ...

  9. python opencv3 —— 改变颜色空间(color space)

    OpenCV: Changing Colorspaces 1. 查看 opencv 支持的颜色空间转换 opencv 中色彩空间转换由一些定义的全局的宏给出,使用如下的代码,将它们调出: >&g ...

随机推荐

  1. Microsoft.ACE.OLEDB.12.0 及其在 MSSQL中的使用

    1.Microsoft.ACE.OLEDB.12.0 简介 就是一个数据访问接口,用于在office文件和非office应用程序间传输数据.例如 Microsoft Office Access 201 ...

  2. android中碰撞屏幕边界反弹问题

    其实碰撞问题只是涉及到一点小算法而已,但在实际应用,尤其游戏中有可能会遇到,下面给出一个小示例,代码如下: MainActivity: package com.lovo; import android ...

  3. js 冷门的 label 语法

    https://github.com/Tencent/vConsole/blob/dev/src/lib/query.js#L142 https://www.cnblogs.com/hjbky/p/6 ...

  4. Java实现打印功能

    用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用Graphics2D直接输出直 ...

  5. js日期操作,某天的N天后,一个月后的日期

    var date = new Date(); var tomorrow = date.setDate(new Date().getDate() + 10); //10天后的日期 console.log ...

  6. sysbench压力测试工具安装和参数介绍

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

  7. Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

    标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate ...

  8. Python 父目录获取

    # coding=utf-8import os currentPath = os.getcwd() # 当前目录parent_path = os.path.dirname(currentPath) # ...

  9. C#-微信公众平台接口-上传临时素材

    最烦做微信公众平台的东西..文档说得不清不楚,又没示例代码,只能自己 慢慢搜索,弄了一晚上,基本弄出来了,把本地的图片上传到微信的临时素材那里,返回媒体ID,用于其他操作,代码如下 :(自己导入相应的 ...

  10. android 中毛玻璃效果的实现

    最近在做一款叫叽叽的App(男银懂的),其中有一个功能需要对图片处理实现毛玻璃的特效 进过一番预研,找到了3中实现方案,其中各有优缺点: 1.如果系统的api在16以上,可以使用系统提供的方法直接处理 ...