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 ...
随机推荐
- 《自己动手写框架2》:用200行的DBF解析器来展示良好架构设计
因为工作关系.须要工作其中,须要读取DBF文件.找了一些DBF读取开源软件,要么是太过庞大,动不动就上万行.要么是功能有问题,编码,长度,总之是没有找到一个很爽的. 在万般无奈之下,我老人家怒从心头起 ...
- jeecg删除菜单导致角色权限设置点不开的问题解决
在JEECG中经常需要删除一些菜单,但是由于当前使用版本jeecg3.7.1功能不够完善,需要手动去删除角色对应目录表的没删除干净的数据,要删除的数据查询SQL语句如下: select * from ...
- Bug:java.lang.StackOverflowError: stack size 8MB
在开发的时候遇到了这个Bug:java.lang.StackOverflowError: stack size 8MB Log: 11-27 14:16:37.093 21892-21892/com. ...
- ios日期格式转换
转自:http://blog.csdn.net/l_ch_g/article/details/8217725 1.如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面 ...
- Golang之字符串格式化
字符串格式化 // Go 之 字符串格式化 // // Copyright (c) 2015 - Batu // package main import ( "fmt" ) typ ...
- hdu1542 Atlantis (线段树+扫描线+离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- transfer learning
https://github.com/jindongwang/transferlearning ftp://ftp.cs.wisc.edu/machine-learning/shavlik-group ...
- [Windows Azure] .NET Multi-Tier Application Using Storage Tables, Queues, and Blobs - 1 of 5
.NET Multi-Tier Application Using Storage Tables, Queues, and Blobs - 1 of 5 This tutorial series sh ...
- 每日英语:The Risks of Big Data for Companies
Big data. It's the latest IT buzzword, and it isn't hard to see why. The ability to parse more infor ...
- MyBean-关于单实例插件
单实例插件可以通过两个途径实现 第一个在注册时注册成单实例 beanFactory.RegisterBean(pvPluginID: String; pvClass: TClass; pvSi ...