我正在寻找从RGB到HSV的色彩空间转换器,特别是对于两种色彩空间的0到255范围。
我已经使用了很长一段时间-现在不知道它们从何而来…请注意,输入和输出(以度为单位的角度除外)在0到1.0的范围内。
注意:此代码不对输入进行真正的完整性检查。谨慎行事!
typedef struct {
double r; // a fraction between 0 and 1
double g; // a fraction between 0 and 1
double b; // a fraction between 0 and 1
} rgb;
typedef struct {
double h; // angle in degrees
double s; // a fraction between 0 and 1
double v; // a fraction between 0 and 1
} hsv;
static hsv rgb2hsv(rgb in);
static rgb hsv2rgb(hsv in);
hsv rgb2hsv(rgb in)
{
hsv out;
double min, max, delta;
min = in.r < in.g ? in.r : in.g;
min = min < in.b ? min : in.b;
max = in.r > in.g ? in.r : in.g;
max = max > in.b ? max : in.b;
out.v = max; // v
delta = max - min;
if (delta < 0.00001)
{
out.s = 0;
out.h = 0; // undefined, maybe nan?
return out;
}
if( max > 0.0 ) { // NOTE: if Max is == 0, this divide would cause a crash
out.s = (delta / max); // s
} else {
// if max is 0, then r = g = b = 0
// s = 0, h is undefined
out.s = 0.0;
out.h = NAN; // its now undefined
return out;
}
if( in.r >= max ) // > is bogus, just keeps compilor happy
out.h = ( in.g - in.b ) / delta; // between yellow & magenta
else
if( in.g >= max )
out.h = 2.0 + ( in.b - in.r ) / delta; // between cyan & yellow
else
out.h = 4.0 + ( in.r - in.g ) / delta; // between magenta & cyan
out.h *= 60.0; // degrees
if( out.h < 0.0 )
out.h += 360.0;
return out;
}
rgb hsv2rgb(hsv in)
{
double hh, p, q, t, ff;
long i;
rgb out;
if(in.s <= 0.0) { // < is bogus, just shuts up warnings
out.r = in.v;
out.g = in.v;
out.b = in.v;
return out;
}
hh = in.h;
if(hh >= 360.0) hh = 0.0;
hh /= 60.0;
i = (long)hh;
ff = hh - i;
p = in.v * (1.0 - in.s);
q = in.v * (1.0 - (in.s * ff));
t = in.v * (1.0 - (in.s * (1.0 - ff)));
switch(i) {
case 0:
out.r = in.v;
out.g = t;
out.b = p;
break;
case 1:
out.r = q;
out.g = in.v;
out.b = p;
break;
case 2:
out.r = p;
out.g = in.v;
out.b = t;
break;
case 3:
out.r = p;
out.g = q;
out.b = in.v;
break;
case 4:
out.r = t;
out.g = p;
out.b = in.v;
break;
case 5:
default:
out.r = in.v;
out.g = p;
out.b = q;
break;
}
return out;
}
问题内容: 我在互联网上找到了一种将RGB值转换为HSV值的方法。不幸的是,当值是R = G = B时,由于0/0操作,我得到的是NaN。 您是否知道Java中是否存在用于此转换的实现方法,或者当我获得0/0除法以获取正确的HSV值时该怎么办? 这是我的方法,它是根据Internet上的一些代码改编而成的: 问题答案: 我很确定您想要的是RGBtoHSB
问题内容: 我需要准确地将HSB转换为RGB,但是我不确定如何解决将小数转换为整数而不四舍五入的问题。这是我从colorpicker库中获得的当前函数: 如您所见,此函数的不准确性来自Math.round 问题答案: / accepts parameters * h Object = {h:x, s:y, v:z} * OR * h, s, v / function HSVtoRGB(h, s,
我使用的是openCV 3.1.0(我试过2.4.9,有同样的问题)。我想输出一个HSV mat到JPEG: 问题是,当我使用执行时,我的程序将失败: OpenCV错误:断言失败(scn==3&(dcn==3 dcn==4)&(depth==CV_8U depth==CV_32F)),位于cvtColor文件/home/pi/OpenCV/src/opencv-3.1.0/modules/imgp
所以,我创建一个图形Bash PS1生成器使用Javascript。用户可以从调色板(jsColor库)中为他们想要的任何元素选择任何颜色。我得到的值是该颜色的RGB代表。我想将该值转换为0-255之间的数字,以便在Bash中表示。 示例: 输入:#000000 输出:0 输入:#FFFFFF 输出: 255 转换为最接近的8位表示形式的任何其他输入 **我检查了这篇文章,但答案不太起作用(我得到
如何将RGB彩色图像或简单的图像转换为CMY彩色图像,并提取每个组件青色(C)洋红色(M)和黄色(Y)?我的方法:-
我有一个返回十进制值的java代码,如下所示 第一个值表示红色的颜色代码,第二个值表示绿色的颜色代码,第三个值表示蓝色的颜色代码。 有没有什么方法可以将这些RGB值转换为java中相应的颜色?
本文向大家介绍在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像,包括了在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像的使用技巧和注意事项,需要的朋友参考一下 的HSV是另一种类型的颜色空间,其中H代表色相,S表示饱和度和V代表值。 一个色调代表颜色。从0度到360度的角度。 角度 颜色 0-60 红 60-120 黄色 120-180 绿色 180
问题内容: 在PHP中,将RGB三元组转换为HSV值的最直接方法是什么? 问题答案: