C++ RGB转HSV

本文介绍了如何在C++中将RGB颜色转换为HSV颜色空间,着重指出输入为BGR格式的情况。作者提到在RGB全为零时直接返回0的特殊情况,并提供了转换公式。还讨论了当RGB值相等或全为0时HSV的特定值。

因为需要一个RGB转到HSV颜色空间,在网上查询了一些资料,但感觉都凌乱,并且大部分都是HSL的,索性就写一个吧,由于读取的图像格式为BGR的,所以输入的为一个BRG格式的结构体,应该不影响大家使用。直接上干货。

#include <iostream>
#include <cmath>

using namespace std;

#define UCHAR unsigned char

struct BGR//定义结构体
{
	UCHAR blue;
	UCHAR green;
	UCHAR red;
};

inline int bgr_feature(BGR *pixel)
	{
		UCHAR b=pixel->blue,g=pixel->green,r=pixel->red;
		UCHAR max,min,tmp;
		float h=0,s=0,v=0,f_tmp=0;
		tmp=b>g?b:g;
		max=tmp>r?tmp:r;//取得最大值
		             if(max==0) return 0;   //当全是0时,直接返回0;*****
		tmp=b>g?g:b;
		min=tmp>r?r:tmp;//取得最小值
		if(max==min)
			goto here;
		h=r-g;
		s=r-b;
		v=g-b;
		f_tmp=acos((h+s)/2/sqrt(h*h+s*v))*180/3.1415926;
		if(b<=g) 
			h=f_tmp;
         	else h=360-f_tmp;
here
		s=(max-min)/static_cast<float>(max);//s
		v=max/255.0;//v

		cout<<"h="<<h<<endl;
		cout<<"s="<<s<<endl;
		cout<&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值