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 = ;
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);
}
OpenCV颜色空间——HLS颜色空间的更多相关文章
- opencv学习笔记——颜色空间转换函数cv::cvtColor详解
cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...
- OpenCV 学习笔记(10)HSV颜色空间及颜色空间转换(RGB-HSV)
1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 H ...
- OpenCV:图像的颜色空间转换
导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) ...
- HSV 和 HLS颜色空间
颜色空间 颜色空间是特定的颜色组织:它提供了将颜色分类,并以数字图像表示的方法. RGB 是红绿蓝颜色空间.你可以将其视为 3D 空间,在这种情况下是立方体,其中任何颜色都可以用 R.G 和 B 值的 ...
- OpenCV里的颜色空间
RGB三原色组合方式是最常用的 RGB色彩空间: R:红色分量 G:绿色分量 B:蓝色分量 HSV色彩空间: H - 色调(主波长). S - 饱和度(纯度/色调). V - 明度(强度). LAB色 ...
- opencv:基于颜色空间的肤色检测方法
参考链接:https://www.cnblogs.com/skyfsm/p/7868877.html
- OpenCV学习(1) RGB颜色空间
1.1彩色空间 颜色是外来的光刺激作用于人的视觉器官而产生的主观感觉,它具有色调.饱和度和亮度三个特性.物体的颜色不仅取决于物体本身,还与光源.周围环境的颜色,以及观察者的视觉系统有关 1.1.1颜色 ...
- 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 ...
- python opencv3 —— 改变颜色空间(color space)
OpenCV: Changing Colorspaces 1. 查看 opencv 支持的颜色空间转换 opencv 中色彩空间转换由一些定义的全局的宏给出,使用如下的代码,将它们调出: >&g ...
随机推荐
- Groovy 学习手册(6)
9. 不可变特性 不可变特性和函数式编程在一起就像是花生酱和果酱在一起一样.虽然没有必要非要在一起使用,但他们相处得很好. 在纯正的函数式语言中,每个函数对本身之外没有影响,即没有副作用.这意味着每次 ...
- windows(64位)下使用curl命令
Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 工具下载 在官网处下载工具包:http://cu ...
- (面试题)如何查找Oracle数据库中的重复记录
今天做了个面试题:查找Oracle数据库中的重复记录,下面详细介绍其他方法(参考其他资料) 本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同 ...
- 【转载并整理】Linux - centOS 6 SVN服务器安装、配置及开机启动
以前在windows上安装svn服务器,用的是VisualSVN-Server用起来还不错,但只能用在windows,在linux上部署使用是 subversion,具体说明如下 参考原文:http: ...
- [转]在windows上实现多个java jdk的共存解决办法
问题背景 公司项目中应用到的jdk环境为1.6,最近在家学习IntelliJ IDEA中sdk多环境配置时,想安装Jdk1.8,作为学习基础.那么问题来了,公司项目扩展不支持jdk1.8,为了既能满足 ...
- android:ellipsize="end" 失效或者 相关的Bug
其实这文章有点傻逼. 相关的问题 TextView android:ellipsize=“end”超出一个字符时不显示…的解决 http://www.pocketdigi.com/20140122/1 ...
- IOC的实现原理—反射与工厂模式的结合
反射机制概念 我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有的成员属性,该如何操作?再考虑另一个场景,如果我们想要在运行期获得某个类的Class信息如它的属性.构造方法.一般方 ...
- Fluent UDF【4】:C语言
Fluent UDF利用的是C语言,本文简单介绍在UDF中经常会用到的C语言常识. 本文部分内容来自UDF手册. 1 C语言中的注释 C语言中的注释利用/*及*/来实现.例如: /*这是一个注释*/ ...
- docker使用示例
本文使用docker容器运行wordpress博客,采用了三种方法来演示,docker的使用 自建wordpress容器 采用官方的wordpress容器 采用docker compose容器管理工具 ...
- Linux 关于Transparent Hugepages的介绍【转】
透明大页介绍 Transparent Huge Pages的一些官方介绍资料: Transparent Huge Pages (THP) are enabled by default in RHEL ...