图像处理面试中HSV,HSL分别是什么意思

&|&&|&&|&&|&&
当前位置: >
C# RGB颜色与HSL颜色的转换与HSL颜色的应用
作者:互联网 & 来源:转载 &
浏览次数:
摘要: RGB颜色,就是用红、绿、蓝三个分量组成的颜色,.NET中用Color类来表示,HSL颜色,就是用色调(Hue)、饱和度(Saturation)、亮度(Lightness)来描绘一个颜色,这两种颜色的介绍网上很多,我就不具体介绍了。RGB颜色和HSL颜色的转化时有固定公式的,大家可以参考WIKI上的介绍(HSL and HSV),下面来介绍一下HSLColor类,它主要实现以下功能,RGB颜色跟H
RGB颜色,就是用红、绿、蓝三个分量组成的颜色,.NET中用Color类来表示,HSL颜色,就是用色调(Hue)、饱和度(Saturation)、亮度(Lightness)来描绘一个颜色,这两种颜色的介绍网上很多,我就不具体介绍了。RGB颜色和HSL颜色的转化时有固定公式的,大家可以参考WIKI上的介绍(),下面来介绍一下HSLColor类,它主要实现以下功能,RGB颜色跟HSL颜色的相互转换,传入一个RGB颜色,我们可以得到这个颜色的色调(Hue)、饱和度(Saturation)、亮度(Lightness),我们可以调节这3个量,得到一个新的颜色,利用这个类,通过调节图片的每个像素的颜色,就可以得到不同效果的图片了。来看看HSLColor类的详细源码:
1 /// &summary&
/// RGB 与 HSL 颜色的相互转换。
/// 转换算法参考:
/// http://en.wikipedia.org/wiki/HSL_color_space。
/// &/summary&
public class HSLColor
private int _alpha = 255;
private int _hue = 0;
private double _saturation = 1d;
private double _lightness = 1d;
public HSLColor()
/// &summary&
/// 用一个RGB颜色构造HSLColor。
/// &/summary&
/// &param name=&color&&&/param&
public HSLColor(Color color)
_alpha = color.A;
FromRGB(color);
/// &summary&
/// 用色彩、饱和度、亮度构造HSLColor。
/// &/summary&
/// &param name=&hue&&色彩。&/param&
/// &param name=&saturation&&饱和度。&/param&
/// &param name=&lightness&&亮度。&/param&
public HSLColor(
double saturation,
double lightness)
Saturation =
Lightness =
public int Hue
get { return _ }
if (value & 0)
_hue = value + 360;
else if (_hue & 360)
_hue = value % 360;
public double Saturation
get { return _ }
if (_saturation & 0)
_saturation = 0;
_saturation = Math.Min(value, 1d);
public double Lightness
get { return _ }
if (_lightness & 0)
_lightness = 0;
_lightness = Math.Min(value, 1d);
public Color Color
get { return ToRGB(); }
set { FromRGB(value); }
public static bool operator ==(HSLColor left, HSLColor right)
return (left.Hue == right.Hue &&
left.Lightness == right.Lightness &&
left.Saturation == right.Saturation);
public static bool operator !=(HSLColor left, HSLColor right)
return !(left == right);
public override bool Equals(object obj)
if (obj == null && !(obj is HSLColor))
HSLColor color = (HSLColor)
return this ==
public override int GetHashCode()
return Color.GetHashCode();
public override string ToString()
return string.Format(
&HSL({0:f2}, {1:f2}, {2:f2})&,
Hue, Saturation, Lightness);
private void FromRGB(Color color)
double r = ((double)color.R) / 255;
double g = ((double)color.G) / 255;
double b = ((double)color.B) / 255;
double min = Math.Min(Math.Min(r, g), b);
double max = Math.Max(Math.Max(r, g), b);
double distance = max -
_lightness = (max + min) / 2;
if (distance == 0)
_saturation = 0;
double hueT
_saturation =
(_lightness & 0.5) ?
(distance / (max + min)) : (distance / ((2 - max) - min));
double tempR = (((max - r) / 6) + (distance / 2)) /
double tempG = (((max - g) / 6) + (distance / 2)) /
double tempB = (((max - b) / 6) + (distance / 2)) /
if (r == max)
hueTmp = tempB - tempG;
else if (g == max)
hueTmp = (0.33331 + tempR) - tempB;
hueTmp = (0.66663 + tempG) - tempR;
if (hueTmp & 0)
hueTmp += 1;
if (hueTmp & 1)
hueTmp -= 1;
_hue = (int)(hueTmp * 360);
private Color ToRGB()
if (_saturation == 0)
r = (byte)(_lightness * 255);
double vH = ((double)_hue) / 360;
double v2 =
(_lightness & 0.5) ?
(_lightness * (1 + _saturation)) :
((_lightness + _saturation) - (_lightness * _saturation));
double v1 = (2 * _lightness) - v2;
r = (byte)(255 * HueToRGB(v1, v2, vH + 0.33331));
g = (byte)(255 * HueToRGB(v1, v2, vH));
b = (byte)(255 * HueToRGB(v1, v2, vH - 0.33331));
return Color.FromArgb(r, g, b);
private double HueToRGB(double v1, double v2, double vH)
if (vH & 0)
if (vH & 1)
if ((6 * vH) & 1)
return v1 + (((v2 - v1) * 6) * vH);
if ((2 * vH) & 1)
return v2;
if ((3 * vH) & 2)
return v1 + (((v2 - v1) * (0.66663 - vH)) * 6);
return v1;
在项目中,为了演示用HSL颜色调节图片效果,还实现了一个HSLModifier类,这个类的功能就是利用HSLColor类,可以对图片的色调、饱和度和亮度进行调节,需要注意的是,为了提高图片调节的效率,在实现中使用了指针,所以在编译的时候需要选择允许不安全代码。看看HSLModifier类的详细源码:
1 public class HSLModifier : FilterColorToColor
private int _
private double _
private double _
public HSLModifier()
public HSLModifier(
double saturation,
double lightness)
Saturation =
Lightness =
public int Hue
get { return _ }
_hue = Math.Max(0, Math.Min(value, 360));
public double Saturation
get { return _ }
_saturation = Math.Max(-1, Math.Min(value, 1));
public double Lightness
get { return _ }
_lightness = Math.Max(-1, Math.Min(value, 1));
protected override unsafe void ProcessFilter(BitmapData imageData)
int width = imageData.W
int height = imageData.H
int perPixelLength = base.GetPerPixelFormatLength(
imageData.PixelFormat);
int offset = imageData.Stride - (width * perPixelLength);
HSLColor hsl = new HSLColor();
byte* csan0 = (byte*)imageData.Scan0.ToPointer();
for (int i = 0; i & i++)
int widthOffset = 0;
while (widthOffset & width)
rgb = Color.FromArgb(csan0[2], csan0[1], csan0[0]);
hsl.Color =
hsl.Hue += _
hsl.Saturation += _
hsl.Lightness += _
rgb = hsl.C
csan0[2] = rgb.R;
csan0[1] = rgb.G;
csan0[0] = rgb.B;
widthOffset++;
csan0 += perPixelL
最后来看看例子的效果:
(1)图像调节前
(2)图像调节后
源码下载地址:
来自:CS 程序员之窗
版权所有 IT知识库 CopyRight (C)
, All Rights Reserved.温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(4360)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_094066',
blogTitle:'HSL、HSV、HSI色彩体系与RGB之间的映射关系',
blogAbstract:'最近查阅到三种色彩体系:HSL、HSV和HSI。貌似HSL色彩体系使用得非常广泛,比如我们最常见的Windows颜色编辑对话框采用的就是这种色彩体系,如下图
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}HSV,最全面的HSV文章 - 电子工程世界网
在电子工程世界为您找到如下关于“HSV”的新闻
HSV资料下载
matlab 很厲害很可怕,一下載就能用...
HSV与RGB相互转换的源代码...
convert RGB to HSV, full...
基于HSV色彩空间的自适应肤色检测...
本文提出了一种使用邻接信息的自适应肤色检测方法。先在HSV 空间对图像使用SPDH 方法以寻找最优的肤色阈值并以此对进行初步肤色分割;然后再通过使用邻接信息的空间扩散法对初步判定的肤色像素进行处理,最终得到肤色像素。实验结果表明,该方法对复杂背景和不同光照下的肤色检测都有较好效果。关键词:肤色检测邻接信息 自适应Abstract:An adaptive method of skin...
系统采用Camshift算法,将人手图像由RGB空间转换到HSV空间后,在HSV空间利用半自动预定义模板颜色对人手进行分割,并对其进行改进实现多目标跟踪,由于Camshift算法为半自动算法,在对手势进行跟踪前需对手势进行手动标定,系统采用了手势跟踪与手势识别技术结合的方法,改进了Camshift算法,解决了Camshift的半自动问题和实现多目标跟踪,实现双手的手势识别。...
运动目标的完整轮廓。分析了阴影在HSV颜色空间的特性,用以消除阴影,并根据噪声的分布特性去除噪声。处理结果表明,处理速度为20 ms/帧,达到实时性要求,运动目标消除了阴影和噪声,具有较强的鲁棒性。 Abstract: &Due to the complexity of the external environment, moving target detected in video...
期刊论文:HSV彩色分割法在人体解剖切片中的应用...
期刊论文:基于HSV颜色模型的广义梯度矢量流图像分割方法...
将RGB模式存储的影像转换成HSV模式存储的影像...
HSV相关帖子
本帖最后由 DavidZH 于
20:21 编辑
& && &&&目前已经实现了物体的跟踪效果,视频中是对不同硬币的跟踪;跟踪的核心思想就是:设定了一个HSV的范围,程序会根据次范围找到图像内符合的物体,进行轮廓查找,最终找到跟踪的物体。下面来看看实际的效果:
基于STM32F7的视觉...
在图像处理方面,我原来是在opencv和MATLAB方面用的比较多。没怎么接触过单片机方面的处理。这次比赛算是收获挺多的。在项目总帖中展示的那段追踪视频。识别是基于颜色分布直方图实现的。先转换颜色空间从RGB到HSV然后根据概率分布图确定概率最大的区域。最后将区域中心坐标发送给云台。
先贴一下RGB2HSV的函数static unsigned char CvtColor(float R...
le062:相信搭一个mjpg-streamer的服务器是比较简单的,照着教程做就行了,先拿openwrt试试,网络监控这部分,需要基于mjpgs做一个监控服务器,能显示所有在线的摄像头。难度不是很大,会c语言就行测试和演示就用c9
Z頔:先把RGB转到HSV颜色空间然后保存小球的H分量的颜色分布直方图,再通过MEANSHIFT进行跟踪,这个都只是基本运算对cpu处理难度不大,这个...
;&int i16 = (b+i) & 15;& && &&&p.setPen( QColor((15-i16)*16,255,255,QColor::Hsv) );& && &&&p.drawText( x, y-sin_tbl[i16]*h/800...
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .20
PhotoYCC Color Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .24
HSI, HLS and HSV Color Spaces . . . . . . . . . . . . . . . . . . . . . . .25...
#include &avr/wdt.h&
#include &usbdrv.h&
Explanation of the HSV color space:
H: Hue& && &&&- 色调(如红,蓝,黄,绿...)
S: Saturation - 饱和度
#include &avr/wdt.h&
#include &usbdrv.h&
Explanation of the HSV color space:
H: Hue& && &&&- 色调(如红,蓝,黄,绿...)
S: Saturation - 饱和度
缺点:如果用户动作太快.连续做了几个动作影响了屏幕.那么.这种方案多少有点让人不太满意.
不同意用像素点的颜色做位运算.个人认识: 用像素的RGB作淡入淡出不合适(单色可以):理由是视角颜色有亮度,灰度等其它属性. 只能用HSV,但是这种结构较复杂, MSDN对这方面几乎不支持用户这么做(API少).同时需要深度学习视觉渐变原理.
你可能感兴趣的标签
热门资源推荐}

我要回帖

更多关于 hsl和hsv 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信