请做过数字图像处理的高手看过来!
请做过数字图像处理的高手看过来!
楼主yl_zhou(风中奇缘)2002-07-20 09:40:05 在 VC/MFC / 基础类 提问 谁有将rgb图像转化为hsv的源代码??
或者告知哪有下??
有急用,自己编的话太麻烦了,而且误差比较大。
请知道的不吝告知。谢了。
也可发我的邮箱:yinglizhou@sohu.com
问题点数:100、回复次数:6Top
1 楼chenybin(小马)回复于 2002-07-20 14:30:02 得分 0
UP好了
你可以去GOOGLE搜索一下
看看有什么启发没有Top
2 楼yl_zhou(风中奇缘)回复于 2002-07-20 14:32:53 得分 0
up到哪里了??
Top
3 楼romanticist(桃花岛主--杭州)回复于 2002-07-20 14:50:12 得分 100
The code is from XV.
#define NOHUE -1
/* ==================================== */
void rgb2hsv(int r,int g,int b,double *hr,double *sr,double *vr)
{
double rd, gd, bd, h, s, v, max, min, del, rc, gc, bc;
/* convert RGB to HSV */
rd = r / 255.0; /* rd,gd,bd range 0-1 instead of 0-255 */
gd = g / 255.0;
bd = b / 255.0;
/* compute maximum of rd,gd,bd */
if (rd>=gd) { if (rd>=bd) max = rd; else max = bd; }
else { if (gd>=bd) max = gd; else max = bd; }
/* compute minimum of rd,gd,bd */
if (rd<=gd) { if (rd<=bd) min = rd; else min = bd; }
else { if (gd<=bd) min = gd; else min = bd; }
del = max - min;
v = max;
if (max != 0.0) s = (del) / max;
else s = 0.0;
h = NOHUE;
if (s != 0.0) {
rc = (max - rd) / del;
gc = (max - gd) / del;
bc = (max - bd) / del;
if (rd==max) h = bc - gc;
else if (gd==max) h = 2 + rc - bc;
else if (bd==max) h = 4 + gc - rc;
h = h * 60;
if (h<0) h += 360;
}
*hr = h; *sr = s; *vr = v;
}
/* ==================================== */
void hsv2rgb(double h,double s,double v,int *rr,int *gr,int *br)
{
int j;
double rd, gd, bd;
double f, p, q, t;
/* convert HSV back to RGB */
if (h==NOHUE || s==0.0) { rd = v; gd = v; bd = v; }
else {
if (h==360.0) h = 0.0;
h = h / 60.0;
j = (int) floor(h);
f = h - j;
p = v * (1-s);
q = v * (1 - (s*f));
t = v * (1 - (s*(1 - f)));
switch (j) {
case 0: rd = v; gd = t; bd = p; break;
case 1: rd = q; gd = v; bd = p; break;
case 2: rd = p; gd = v; bd = t; break;
case 3: rd = p; gd = q; bd = v; break;
case 4: rd = t; gd = p; bd = v; break;
case 5: rd = v; gd = p; bd = q; break;
default: rd = v; gd = t; bd = p; break; /* never happen */
}
}
*rr = (int) floor((rd * 255.0) + 0.5);
*gr = (int) floor((gd * 255.0) + 0.5);
*br = (int) floor((bd * 255.0) + 0.5);
}
grey = 0.30 * red + 0.59 * green + 0.11 * blue
Top
4 楼yl_zhou(风中奇缘)回复于 2002-07-20 15:04:57 得分 0
XV?是哪里?谢谢!Top
5 楼romanticist(桃花岛主--杭州)回复于 2002-07-20 16:42:03 得分 0
一本书
Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
