首页 > 编程知识 正文

常用hsv颜色,hsv是什么颜色

时间:2023-05-05 14:40:38 阅读:144444 作者:3523

1. RGB型号

2. HSV机型

3 .如何理解RGB与HSV的联系

4. HSV在图像处理中的应用

5. opencv中RGB--HSV的实现

在图像处理中,最常用的颜色空间是RGB模型,常用于颜色显示和图像处理,三维坐标的模型形式非常容易理解。

HSV模型是表现用户外观的颜色模型,重视颜色显示、颜色、浓淡、明暗。 第一次接触HSV,书里第一个抛出的是圆锥模型,因为很少使用HSV,所以不会给人留下深刻的印象,但是从一些资料来看,HSV的概念有时会出现,骚扰一些人的神经,所以阐明了HSV和RGB的关系,直接

1. RGB型号。

三维坐标:

从原点到白色顶点的中心轴线为灰度线,r、g、b三个分量相等,强度可以用三个分量的矢量表示。

用RGB理解颜色、浓淡、明暗的变化:

颜色变化:连接三个坐标轴RGB的最大分量顶点和kkdsbYMC的颜色顶点的线

浓淡变化:从RGB顶点和CMY顶点到原点和白色顶点中心轴的距离

明暗变化:中心轴点的位置到原点时变暗,到白色顶点时变亮

PS:光学的分析

混合三原色RGB可以产生其他颜色,并不是物理上其他颜色的光可以混合三原色的光。 像黄光这样的单色光各有自己的光谱,但红色和绿色混合后会形成黄色。 原因是人类的感觉系统造成的,与人类的生理系统有关。

只能说“将三原色的光以不同的比例复合,人的眼睛会产生与各种频率的可见光等价的色觉”。

2. HSV机型

倒圆锥模型:

这个模型是用颜色、浓淡、明暗描绘的。

h是颜色

s为浓淡,S=0时,仅灰度

v是明暗的,表示颜色的亮度,但与光的强度没有直接关系。

3. RGB与HSV的联系

根据以上的直观理解,将RGB维坐标的中心轴立起扁平化后,就可以制作HSV的圆锥模型。

但是,由于v只选择了一个RGB的最大成分,所以与强度没有直接关系。 RGB反映光的强度(或灰度)的变化。

v=max(r,g,b ) ) )。

从RGB转换为HSV :

' HSV是用户直观的颜色模型。 从指定色角h,使V=S=1的纯色开始,通过在其中添加黑色和白色,可以获得所需的颜色。 增加黑色时,s不变,v变小;增加白色时,v不变,s变小。 例如,要获得深蓝色,V=0.4 S=1 H=240度。 要获得浅蓝色,V=1 S=0.4 H=240度。' 百度百科

4. HSV的图像处理APP应用

HSV在指定颜色分割时起着比较大的作用。

h成分和s成分表示颜色信息。

分割应用:

用h成分和s成分表示颜色的距离。 颜色距离表示两种颜色之间的数值差异。 Androutsos等人通过实验大致划分了HSV颜色空间,亮度大于75%色度大于20%的是明亮的颜色区域,亮度小于25%的是黑色的区域,亮度大于75%色度小于20%的是白色的区域,除此之外是彩色的

对于不同的颜色区域,通过混合h和s的变量并确定阈值,可以进行简单的分割。

HSV的阴影消除算法:

improvingshadowsuppressioninmovingobjectdetectionwithhsvcolorinformation

5 .在5. RGB -- HSV上实现opencv

结构RGB2HSV _ f { typedeffloatchannel _ type; RGB2HSV_f(int_srccn,int _blueIdx,float _hrange ) :srccn ),blueidx ),hrange () ) ) ) ) ) 浮动h scale

= hrange*(1.f/360.f);        n *= 3;            for( i = 0; i < n; i += 3, src += scn )        {            float b = src[bidx], g = src[1], r = src[bidx^2];            float h, s, v;                        float vmin, diff;                        v = vmin = r;            if( v < g ) v = g;            if( v < b ) v = b; // v = max(b, g, r)            if( vmin > g ) vmin = g;            if( vmin > b ) vmin = b;                        diff = v - vmin;            s = diff/(float)(fabs(v) + FLT_EPSILON); // s = 1 - min/max            diff = (float)(60./(diff + FLT_EPSILON));            if( v == r )                h = (g - b)*diff;            else if( v == g )                h = (b - r)*diff + 120.f;            else                h = (r - g)*diff + 240.f;                        if( h < 0 ) h += 360.f; // h 求值                        dst[i] = h*hscale;            dst[i+1] = s;            dst[i+2] = v;        }    }        int srccn, blueIdx;    float hrange;};

RGB --> GRAY的实现 算法:

template<typename _Tp> struct RGB2Gray{ typedef _Tp channel_type; RGB2Gray(int _srccn, int blueIdx, const float* _coeffs) : srccn(_srccn) { static const float coeffs0[] = { 0.299f, 0.587f, 0.114f }; // 三分量系数不同,人眼对绿色最敏感,所以G分量系数较大 memcpy( coeffs, _coeffs ? _coeffs : coeffs0, 3*sizeof(coeffs[0]) ); if(blueIdx == 0) std::swap(coeffs[0], coeffs[2]); } void operator()(const _Tp* src, _Tp* dst, int n) const // 运算 { int scn = srccn; float cb = coeffs[0], cg = coeffs[1], cr = coeffs[2]; for(int i = 0; i < n; i++, src += scn) dst[i] = saturate_cast<_Tp>(src[0]*cb + src[1]*cg + src[2]*cr); // 结果 } int srccn; float coeffs[3];};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。