因为需要一个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

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

8857

被折叠的 条评论
为什么被折叠?



