谁能帮忙解释一下,有关HSV的问题。

KEAIDEXUYUANYUAN 2006-05-22 11:37:27
图片经由扫描仪扫描进来后,颜色有些不准确,
本应该相同颜色的背景或者图案也许会出现或深或浅很多颜色,
而我要对图案进行提取,
我的初步想法是用种子填充,或者是直方图来区分背景和图案,
不知道是否行得通。

领导建议我用HSV来做,不用RGB,
谁能帮我解释一下为什么啊?
HSV不也是3个值确定一个像素么,
在这里用它表示比用RGB表示好在哪里了啊?

唉,我十分想知道原因,然后才能心甘情愿的用它来写。
谢谢~!
...全文
316 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
KEAIDEXUYUANYUAN 2006-05-23
  • 打赏
  • 举报
回复
谢谢 DentistryDoctor(MVP称号也不能顶上缺失的文凭(厚积薄发)) ( )
你说的那个网页我也找到了,已经知道RGB与HSV如何转化了,
而且也知道HSV的颜色空间的含义了,
我所不理解的地方是指:
在扫描仪扫描不准确的情况下,如果要作图像提取,
为什么用HSV颜色空间比用RGB要好?
扫描仪扫描不准确会是什么不准确呢?
色相、饱和度、还是纯度?
DentistryDoctor 2006-05-22
  • 打赏
  • 举报
回复
RGB、HSV色彩空间模式的互相转换

文章来源:
http://bobhaocb.blogchina.com/1168000.html

在开发有关bitmap方面的程序时,经常需要将位图的颜色在RGB和HSV色彩空间之间转换,前段时间本人研究过,现在整理一下,希望对大家能有所帮助,该颜色转换由C++实现


在开发有关bitmap方面的程序时,经常需要将位图的颜色在RGB和HSV色彩空间之间转换,前段时间本人研究过,现在整理一下,希望对大家能有所帮助,该颜色转换由C++实现:

RGB颜色空间转换为HSV空间颜色值:

void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V)
{
// r,g,b values are from 0 to 1
// h = [0,360], s = [0,1], v = [0,1]
// if s == 0, then h = -1 (undefined)

float min, max, delta,tmp;
tmp = min(R, G);
min = min( tmp, B );
tmp = max( R, G);
max = max(tmp, B );
V = max; // v

delta = max - min;

if( max != 0 )
S = delta / max; // s
else
{
// r = g = b = 0 // s = 0, v is undefined
S = 0;
H = UNDEFINEDCOLOR;
return;
}
if( R == max )
H = ( G - B ) / delta; // between yellow & magenta
else if( G == max )
H = 2 + ( B - R ) / delta; // between cyan & yellow
else
H = 4 + ( R - G ) / delta; // between magenta & cyan

H *= 60; // degrees
if( H < 0 )
H += 360;
}

HSV颜色空间转换为RGB空间颜色值:

void Hsv2Rgb(float H, float S, float V, float &R, float &G, float &
{
int i;
float f, p, q, t;

if( S == 0 )
{
// achromatic (grey)
R = G = B = V;
return;
}

H /= 60; // sector 0 to 5
i = floor( H );
f = H - i; // factorial part of h
p = V * ( 1 - S );
q = V * ( 1 - S * f );
t = V * ( 1 - S * ( 1 - f ) );

switch( i )
{
case 0:
R = V;
G = t;
B = p;
break;
case 1:
R = q;
G = V;
B = p;
break;
case 2:
R = p;
G = V;
B = t;
break;
case 3:
R = p;
G = q;
B = V;
break;
case 4:
R = t;
G = p;
B = V;
break;
default: // case 5:
R = V;
G = p;
B = q;
break;
}
}
DentistryDoctor 2006-05-22
  • 打赏
  • 举报
回复
http://photoshopcn.com/bbs/thread-347504-1-1.html
gorden 2006-05-22
  • 打赏
  • 举报
回复
我也是在做这个,刚好碰到这个问题.
请问:hsv模式怎么显示出来,它也是三个字节表示一个像素的,那么怎么将这种模式显示出来.还是,处理后,在将hsv模式转化为rgb呢?
寻开心 2006-05-22
  • 打赏
  • 举报
回复
颜色空间有多种

除了rgb,hsv之外还有cmyk等等

同样是颜色的表示,不同的方法用于不同的类型的数据处理比较方便

hsv当中,v是亮度, 忽略v的数值,仅仅用h和s来处理,可以规避因为扫描仪的问题而导致的同色颜色深浅不一的问题,刚好可以解决你的问题

如果用rgb就难以处理

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧