2017年全国大学生电子设计竞赛(预测题)-RGB转HSL

2017年全国大学生电子设计竞赛(预测题)-RGB转HSL

 

在预测题中有一个板球系统的预测题,与不久前所给出的元器件的清单有很多的吻合之处,故很多人都开始做板球控制系统,我们小组面临的第一个问题就是图像处理这块,现在将成功后的经验分享出来。

 

首先是,参照网上的大部分的成功做法我们也采用腐蚀算法来处理,而首先是图像RGB颜色模式的转成HSL颜色模式的转换问题,虽然网上已有源码,但还是要进行源码分析的。下面进行源码分析,至于RGB和HSL的原理请自行百度。

我们使用就结构体来表示这两种格式的颜色

typedef struct					  //HLS格式
{
	unsigned char Hue;			 //色度,[0,240]				
	unsigned char Lightness;		//亮度,[0,240]	     
	unsigned char Saturation;		//饱和度,[0,240]	     
}COLOR_HLS;
typedef struct 				//RGB格式
{
	unsigned char Red;		// [0,255]
	unsigned char Green;            // [0,255]
	unsigned char Blue;             // [0,255]
}COLOR_RGB;

再来就是RGB和HSL的转换公式


 

 

 

接下来就是RGB转HSL的函数

 

/*************************************
//RGB转HLS
//H:色度
//L:亮度
//S:饱和度

*************************************/
static void RGB2HSL( const COLOR_RGB* color_rgb, COLOR_HLS* color_hls )
{
	int r, g, b;
	int h, l, s;
	int max, min, dif;
	
	r = color_rgb->Red;
	g = color_rgb->Green;
	b = color_rgb->Blue;
	
	max = maxOf3Values( r, g, b );//计算RGB三个值中的最大值
	min = minOf3Values( r, g, b );//计算RGB三个值中的最小值
	dif = max - min;
	
	//计算l,亮度
	l = ( max + min ) * 240 / 255 / 2;
	
	//计算H,色度
	if( max == min )
	{
		s = 0;
		h = 0;
	}
	else
	{
		
		if( max == r )
		{
			if( min == b )
			{
				h = 40 * ( g - b ) / dif;
			}
			else if( min == g )
			{
				h = 40 * ( g - b ) / dif + 240;
			}
			
		}
		else if( max == g )
		{
			h = 40 * ( b - r ) / dif + 80;
		}
		else if( max == b )
		{
			h = 40 * ( r - g ) / dif + 160;
		}
		
		//计算S,饱和度
		if( l == 0 )
		{
			s = 0;
		}
		else if( l <= 120 )
		{
			s = dif * 240 / ( max + min );
		}
		else
		{
			s = dif * 240 / ( 480 - ( max + min ) );
		}		 
	}   
    	color_hls->Hue = h;				//色度
	color_hls->Lightness = l;		        //亮度
	color_hls->Saturation = s;			//饱和度
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值