`
izuoyan
  • 浏览: 9221308 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

convert RGB to HLS

阅读更多

double hue2rgb( float p, float q, float rgb )
{
double color;

if ( rgb < 0.f ){
rgb = rgb + 1.f;
}
if ( rgb > 1.f ){
rgb = rgb - 1.f;
}

if ( 6.f * rgb < 1 )
{
color = p + ( q - p ) * 6.0 * rgb;
}
else if ( 2.0 * rgb < 1 )
{
color = q;
}
else if ( 3.0 * rgb < 2 )
{
color = p + ( q - p ) * ( ( 2.0 / 3.0 ) - rgb ) * 6.0;
}
else
{
color = p;
}
return color;
}
void rgb2hls(DWORD rgb, float &hue, float &lum, float &sat)
{
float r, g, b;
float rgb_min, rgb_max, delta;

r = GetRValue( rgb ) / 255.0; //Where RGB values = 0 / 255
g = GetGValue( rgb ) / 255.0;
b = GetBValue( rgb ) / 255.0;

rgb_max = max( r, max( g, b ) );
rgb_min = min( r, min( g, b ) );
delta = rgb_max - rgb_min;

if ( !delta ){
hue = 0.f;
sat = 0.f;
}
else if ( rgb_max == r ){
if ( g >= b ){
hue = 60 * ( g - b ) / delta;
}
else {
hue = 60 * ( g - b ) / delta + 360;
}
}
else if ( rgb_max == g){
hue = 60 * ( b - r ) / delta + 120;
}
else /*if ( rgb_max == b )*/{
hue = 60 * ( r - g ) / delta + 240;
}

lum = ( rgb_max + rgb_min ) / 2.f;

if ( lum == 0.f ){
sat = 0.f;
}
else if ( lum <= 0.5f ){
sat = delta / ( 2 * lum );
}
else {
sat = delta / ( 2 - 2 * lum );
}

}

void hls2rgb(float hue, float lum, float sat, DWORD &rgb)
{
float q, p;
float r, g, b;
float h;
float tr, tg, tb;

if ( sat == 0.f ){
r = hue * 255.f;
g = hue * 255.f;
b = hue * 255.f;
}
else {
if ( lum < 0.5f ){
q = lum * ( 1.f + sat );
}
else {
q = lum + sat - ( lum * sat );
}
p = 2.f * lum - q;

h = hue / 360.f;
//h = hue;

tr = h + 1.f / 3.0f;
tg = h;
tb = h - 1.f / 3.0f;

r = hue2rgb( p, q, tr );
g = hue2rgb( p, q, tg );
b = hue2rgb( p, q, tb );

r *= 255.f;
g *= 255.f;
b *= 255.f;

rgb = RGB( (BYTE)r, (BYTE)g, (BYTE)b );
}
}


Reference:

http://zh.wikipedia.org/wiki/HSL和HSV色彩空间

分享到:
评论

相关推荐

    RGB_To_HLS.rar_HLS_HLS色彩变换_RGB to H_rgb to hls_rgb转换hls公式

    这个"RGB_To_HLS"程序很可能就是这样一个工具,可以帮助用户快速将RGB颜色转换成HLS表示,对学习图形学的初学者来说,这是一个很好的实践项目,可以加深对颜色模型理解。 在实际应用中,HLS模型的优势在于其与人类...

    RGB-HLS.rar_HLS_hls图像处理_rgb hls_rgb与hls颜色

    RGB-HLS转换是图像处理领域中的一个重要概念,它涉及到颜色模型的转换。RGB(Red, Green, Blue)是我们常见的三原色模型,广泛应用于数字图像和屏幕显示,而HLS(Hue, Lightness, Saturation)则是一种更加符合人类...

    RGB与HLS模型转换(论文&C程序)

    RGB与HLS模型转换是计算机图形学和图像处理领域中的基本概念,它们是两种不同的颜色表示方式。在深入探讨这两个模型及其相互转换之前,我们首先理解它们的基本原理。 RGB(红绿蓝)模型是最常见的颜色空间,它基于...

    RGB-HLS.zip_HLS_HLS C_rgb hls

    在这个名为"RGB-HLS.zip_HLS_HLS C_rgb hls"的压缩包中,包含了实现RGB到HLS转换的源代码,帮助我们理解这两种颜色模型之间的转换过程。 首先,RGB颜色模型是一种加性颜色模型,基于三种基本颜色——红色、绿色和...

    rgb空间与hls空间的转换

    主要是利用matlab进行编程。编程的内容是关于rgb坐标空间与hls坐标空间的转换。

    hls拉流实例1,hls推流,C#源码.rar

    在本实例中,我们关注的是HLS的拉流和推流技术,以及C#语言实现的相关源码。下面将详细介绍HLS拉流、推流的概念及其在C#中的实现。 一、HLS拉流 HLS拉流是指客户端通过HTTP请求从服务器端获取HLS流的过程。客户端...

    hls_rgb2gray.zip

    《Xilinx HLS在Zynq平台上的RGB转灰度图像处理实践》 Xilinx的High-Level Synthesis(HLS)工具是一种强大的设计方法,它允许工程师使用C、C++或SystemC等高级语言来实现数字逻辑电路,极大地提高了设计效率和...

    vivado hls rgb图像转灰度图像例程

    在这个"vivado hls rgb图像转灰度图像例程"中,我们将探讨如何利用Vivado HLS来实现RGB图像到灰度图像的转换,并应对2020.2版本之后不再自带OpenCV库的问题。 RGB图像到灰度图像的转换是一个常见的图像处理操作,它...

    HLS.js加密

    在这个例子中,`hls.loadSource()`方法加载了M3U8播放列表,`hls.attachMedia()`方法将HLS实例与`&lt;video&gt;`元素关联,从而开始播放加密的HLS流。 总的来说,HLS.js加密涉及到的内容包括HLS协议、M3U8播放列表解析、...

    hls拉流实例1,hls推流,C#

    本实例主要关注C#环境下如何实现HLS拉流和推流,以及如何创建一个简单的HLS拉流播放器。以下是关于HLS拉流、推流及C#实现的相关知识点: 1. **HLS协议**:HLS通过将多媒体内容切割成小段的TS(Transport Stream)...

    海康摄像头HLS视频播放示例

    本示例主要探讨如何通过HLS协议在浏览器上实现海康摄像头视频的播放。 首先,我们来理解HLS的基本工作原理。HLS将视频流分割成多个小的TS(Transport Stream)文件,每个文件通常包含几秒钟的视频内容。服务器会...

    HLS 压力测试 解释

    ### HLS压力测试详解 #### 一、HLS (HTTP Live Streaming) 概念与原理 HTTP Live Streaming(HLS)是一种由苹果公司开发的基于HTTP的流媒体传输协议,主要用于实时视频流或预录制视频的分发。HLS通过将视频内容...

    HLS协议官方文档

    根据提供的文件内容,这份文档是关于HLS协议的第七版官方文档。HLS的主要作用是将无边界(不受限制)的多媒体数据流从服务器传输到客户端,并定义了文件的数据格式以及服务器(发送者)和客户端(接收者)应当执行的...

    FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码

    内容摘要:请看csdn博文 csdn博文链接如下: ... 注意!注意!...4、了解Xilinx HLS设计思路和方法; 5、了解zynq系列器件的vivado设计方法 6、了解VDMA的使用和SDK配置; 7、了解SDK使用方法和技巧;

    videojs支持hls播放

    **正文** ...2. **添加HLS插件**:Video.js 自身并不包含对HLS的内置支持,需要安装`videojs-contrib-hls`插件。可以使用npm或直接从CDN引入。 ```bash npm install videojs-contrib-hls # 或者 ...

    HLS进行c simulation没有hls-opencv.h的文件,出现Segmentation fault

    在使用HLS(High-Level Synthesis,高层次综合)进行C语言模拟时,如果遇到“hls-opencv.h”文件缺失并伴随“Segmentation fault”的错误,这通常涉及到OpenCV库在HLS项目中的集成问题。OpenCV是一个广泛使用的...

    HLS opencv编译库

    在FPGA(Field-Programmable Gate Array)平台上,利用High-Level Synthesis(HLS)技术可以将高级语言(如C++)编写的代码转化为硬件描述语言(如Verilog或VHDL),从而实现高效的硬件加速。Vitis HLS是Xilinx公司...

    H5视频播放工具hls.js

    6. 事件监听:hls.js提供了多种事件,如`hls.on('levelloaded', callback)`,可以监听到当前播放的视频质量变化,方便进行用户界面更新或其他定制逻辑。 7. 缓存策略:为了优化播放体验,hls.js会缓存已加载的TS...

    hls.7z hls ip code mnist nnet

    标题 "hls.7z" 暗示了这是一个与硬件描述语言(HDL)相关的项目,特别是使用了High-Level Synthesis(HLS)技术。HLS是一种将高级编程语言(如C、C++或SystemC)转换为硬件描述语言(如Verilog或VHDL)的方法,用于...

    PC浏览器中的HLS播放器

    总结来说,“PC浏览器中的HLS播放器”是指利用Web技术在个人电脑的浏览器上实现HLS流媒体播放的解决方案。这涉及到HTML5的`&lt;video&gt;`标签、MSE、第三方JavaScript库(如Video.js)以及对各种浏览器兼容性的考虑。通过...

Global site tag (gtag.js) - Google Analytics