图像处理之RGB转为HSV

本文详细介绍了如何将RGB颜色模型转换为HSV颜色模型,并通过具体的C语言代码示例展示了这一过程。文中还提供了一种利用HSV模型保留图像中红色部分的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从 RGB 到 HSL 或 HSV 的转换

设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSL 空间中的 (h, s, l) 值,这里的 h ∈ [0, 360)是角度的色相角,而 s, l ∈ [0,1] 是饱和度和亮度,计算为:


上面的理论也是从别人那里直接拷贝过来的,基本的理论知识就在上面。

static int rgb2hsv_max(int a,int b,int c)
{
	int max = a;
	if(b > max) max = b;
	if(c > max) max = c;
	return max;
}

static int rgb2hsv_min(int a,int b,int c)
{
	int min = a;
	if(b < min) min = b;
	if(c < min) min = c;
	return min;
}

static int rgb2hsv(int r,int g,int b,int *h,int *s,int *v)
{
	int imax,imin,diff;
	imax = rgb2hsv_max(r,g,b);
	imin = rgb2hsv_min(r,g,b);
	diff = imax - imin;
	*v = imax;
	if(imax == 0)
		*s = 0;
	else
		*s = diff;

	if(diff != 0)
	{
		if(r == imax)
		{
			*h = 60 * (g - b) / diff;
		}
		else if(g == imax)
		{
			*h = 60 * (b - r) / diff + 120;
		}
		else
		{
			*h = 60 * (r - g) / diff + 240;
		}

		if(*h < 0)
			*h = *h + 360;
	}
	else
		*h = -1;

	return 0;
}
这里采用hsv保留图像中的红色,滤除其他颜色:

static int RED_COLOR(int r,int g,int b)
{
	int h,s,v;
	rgb2hsv(r,g,b,&h,&s,&v);
	if((h > 0 && h < 16) || (h > 240 && h < 360))
		return 1;
	return 0;
}
运行结果:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值