❶ 颜色空间RGB与 色调、饱和度、亮度(ESL)转换的完整C语言算法
你把0-240 按比例 缩放 一下 到 HSL 的 范围,用 HSL-RGB 转换。
HSL--H是色相(0到360度),S是饱和度(0到1),L是亮度(0到1)
规1化的 HSL到RGB颜色值算换子程序:
// nomorized h,s,L 0-1.0
void HSL2RGB(double h, double s, double L,unsigned char *rr, unsigned char *gg,
unsigned char *bb)
{
double v,m,sv, vs0, c1, c2,xiaoshu,r,g,b;
int ih;
r = L; g = L;b = L;
if (L <= 0.5) v = L * (1.0 + s); else v = L + s - L * s;
if (v > 0) {
m = L + L - v; sv = (v - m ) / v;
h = h * 6.0; ih = (int)h;
xiaoshu = h - ih;
vs0 = v * sv * xiaoshu; c1 = m + vs0; c2 = v - vs0;
switch (ih) {
case 0: r = v; g = c1; b = m; break;
case 1: r = c2; g = v; b = m; break;
case 2: r = m; g = v; b = c1; break;
case 3: r = m; g = c2; b = v; break;
case 4: r = c1; g = m; b = v; break;
case 5: r = v; g = m; b = c2; break;
default: break;
}
}
*rr = (int) (r * 0xff); *gg = (int) (g * 0xff); *bb = (int) (b * 0xff);
}
把你3个数值,各除以240,代入子程序即可。
详见:http://hi..com/svjvcfwticdkmse/item/e6c43a21e385b10977272c0e
彩虹光谱RGB值自动生成程序 (L_o_o_n_i_e == 金色潜鸟)
❷ 25%的灰度RGB是多少
25%的灰度RGB(25,25,25)。
灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图像,它的像素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个256级灰度的图像,如果RGB三个量相同时,如:RGB(100,100,100)就代表灰度为100,RGB(50,50,50)代表灰度为50。
彩色图像的灰度其实在转化为黑白图像后的像素值(是一种广义的提法),转化的方法看应用的领域而定,一般按加权的方法转换,R, G,B 的比一般为3:6:1。
任何颜色都由红、绿、蓝三基色组成,假如原来某点的颜色为RGB(R,G,B),那么,可以通过下面几种方法,将其转换为灰度:
1、浮点算法:Gray=R*0.3+G*0.59+B*0.11
2、整数方法:Gray=(R*30+G*59+B*11)/100
3、移位方法:Gray =(R*77+G*151+B*28)>>8;
4、平均值法:Gray=(R+G+B)/3;
5、仅取绿色:Gray=G;
通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。
(2)rgb通用算法扩展阅读
RGB格式:
对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。
RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。
但是,它缺乏与早期黑白显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。
网页格式:
由于网页(WEB)是基于计算机浏览器开发的媒体,所以颜色以光学颜色RGB(红、绿、蓝)为主。网页颜色是以16进制代码表示,一般格式为#DEFABC (字母范围从A-F,数字从0-9 );
如黑色,在网页代码中便是:#000000(在css编写中可简写为#000)。当颜色代码为#AABB11时,可以简写为#AB1表示,如#135与#113355表示同样的颜色。
RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。
以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色)…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白。
❸ 纯色在RGB空间里面的位置是什么纯色的RGB算法是什么
纯色在色坐标上很容易找到, 这个你需要网络"1931xy色坐标绘制".
另外,你对纯色有一定的误解.
在RGB上, 也就是你希望得到(xxx,xxx,xxx) 这种类型是不行的.
所谓的(255,255,0)并不是指的纯色黄色光, 它指的是你的电脑显示器的像素中 R像素和G像素最大亮度时混合而成的黄光, 用专业的光学来解释也就是说: 这时得到的黄色仅仅是在你显示器的色域R,G两点连线的边上. 并非是所谓的对应单一的波长的黄光.
简单来说,也就是你所谓的RGB空间其实是指你显示器的色域空间, 要确定这个色域空间的颜色坐标需要先将R,G,B 三色画面的坐标(x,y)以及亮度(L)利用光学仪器测出, 然后利用三角形原理即可算出所有坐标.
❹ 存在十六进制转换为RGB的通用计算公式吗,如果有请给出
存在十六进制转换为RGB的汪困通用计算公式如下:
DC = 220 R
14 = 20 G
3C = 60 B
一一对应的,16进制转10进制。可以用电脑的计算桐陵谨器。科学型。
进制转换如下:
F= 15
E =14
D = 13
C=12
B=11
A=10
(4)rgb通用算法扩展阅读:
16转10
16进制数的第0位的权值为16的0次方,局基第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
例:2AF5换算成10进制:
用竖式计算:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
❺ 谁能给一个渐进色的算法--要全一点的
渐进色的话可以这样做~~~例如从RGB(r1,g1,b1)到RGB(r2,g2,b2)
首先你设置一个步长step,步长你可以取绘制矩形的大小或者是颜色分量差的最大值,我这里就简单地取颜色分量差的量大值吧~~
s1=r1-r2
s2=g1-g2
s3=b1-b2
那么step=max( abs(s1) , abs(s2), abs(s3) )
这样你可以得到
f_r = s1 / (float)step;
f_g = s2 / (float)step;
f_b = s3 / (float)step;
设一个变量i = 0; i < step; i++
新的颜色c = RGB( r1+f_r*i , r2+f_g*i , r3+f_b*i )
==============================
PhotoShop中那个渐变是用OpenGL来渲染的~~~用这个的话就简单多了~~只用指定左边两点和右边两点的颜色,然后以GL_SMOOTH这个默认个值来填充就行了……
❻ 详细请教:关于十进制RGB颜色值转换十六进制颜色值的算法
把十六进制的数前面加0补成长度为6的数,然后前两位化成十进制数代表红色,中间两位化成十进制数代表绿色,最后两位化成十进制数代表蓝色。如&FFFF,先变成00FFFF,于是等于RGB(0,255,255)
网上还有专门的颜色值运算器,要是嫌计算麻烦,就下一个用吧~~~
❼ 详解RGB-HSB互相转换的算法
在讲这个之前,首先简单介绍一下什么是RGB,什么是HSB。
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。显示器大都是采用了RGB颜色标准。
HSB又称HSV,表示一种颜色模式:在HSB模式中,H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度。HSB模式对应的媒介是人眼。
(以下为了避免RGB的B和HSB的B混淆,HSB统一写作HSV)
RGB的色彩模型是一个立方体,而HSV的色彩模型一般为圆柱体或圆锥体。详见下图:
当然,色彩模式还有很多,诸如:CMYK,ABL等等,本文不多做介绍。
相对于RGB,HSV模式更便于描述人眼对与颜色的感觉。如图的HSV椎形坐标,横截面从下往上亮度值V从0%到100%递增,横截面的中心(即圆心位置)是灰色的,随着半径增大(相对远离圆心位置),饱和度S从0向100%递增,色相H取值0°~360°,代表截面上红、黄、绿、青、蓝、紫的颜色变化。
HSV坐标系最顶部的截面最外圈,饱和度和亮度都是100%,随着色相从0°到360°变化,RGB值的变化如上图,红色、绿色、蓝色分别位于0°、120°、240°;0°到60°之间绿色分量均匀增加,60°到120°之间红色分量均匀减少,以此类银谨推。设置S=V=100%,调整H的值观察RGB的变换就能发现这个规律。如下图:
根据上图可知,不论H处于哪个位置,RGB值中的(r,g,b)三个数值中最大值一定是255,最小值一定是0。
而由此可见,与H相关的,是RGB值中的判搏顷(r,g,b)三个数值中最大的那个值。
在亮度B=100%时,饱和度S降低,即“不饱和度”会升高,会使得RGB与最大值255相差的部分对应增大,RGB三个分量越趋于相同就使得图像越灰。而这个“不饱和度”可以用1-S来代替。
而RGB三个分量中的单个分量的数值中,经过我在PS中对色相立方体的多次测试观察,可以推断。如下图,当只改变最大值且使它保持最大值时,颜色只会在Y轴纵向偏移,而改变最小值且使它保持最小值,颜色只会在X轴进行横向偏移。由此可见max是由纯色向着黑色进行渐变的,max越小,颜色越暗,min是由纯色向着白色进行渐变的,min越大,颜色越亮。
在明度开始下降时,RGB的三个分量,都会开始同时下降,下降递减的值,是根据分量本身来定的。
根据“概念二”可知,明度相关的是RGB的最大值。
如:rgb(255,255,255)
那么这个时候的明度是100%。
R=255/255=100%=1
G=255/255=100%=1
B=255/255=100%=1
如:rgb(126,24,99)
那么这个时候的明度是49%。
R=126/255=49=0.49
G=25/255=10=0.1
B=99/255=39=0.39
以PS的色相立方体为模型,H从最底下0°开始上升,到360°=0°,除去0°和360°两个顶点同为红色外,60°黄色,120°绿色,180°青色,240°蓝色,300°紫色。
以这七个位置作为原点,向右是正向偏移,即f,向左是反向偏移,即1-f。
正掘陆向偏移取的是这六个区间内的左边的值,反向偏移取的是这六个区间右边的值。
如:130°,相对120°的绿色,正向偏移了10°,相对180°的青色反向偏移了50°
而这个时候的绿色为255,蓝色从左自右逐渐递增,红色始终为0。
由此可见正向偏移得到的是最大值max,反向偏移得到的是中间值med。
在确定H的值之前,需要知道H代表的是什么,以及H和RGB之间的关系。
根据上文提到,H代表的是色相,以及“概念一”中提到的可以得知:
h1=[H/60] mod6
详解:h1等于H除以60,取整数部分,然后除以六,求出余数。
H/60的整数部分除以六,求出余数。是确定H在的颜色区域。而H/60的小数部分,即为在这个颜色范围中偏移的值。
如果h1=0,那么颜色在0°-60°区域
如果h1=1,那么颜色在60°-120°区域
如果h1=2,那么颜色在120°-180°区域
如果h1=3,那么颜色在180°-240°区域
如果h1=4,那么颜色在240°-300°区域
如果h1=5,那么颜色在300°-359°区域
f=H/60-h1
详解:这里变量f求的是颜色在色相环中对应区域的偏移值。已知 [H/60] 是确定区域作用,
根据上文提到,H/60的小数部分是求颜色范围的偏移值
,那么h/60-[h/60]=H/60-h1就是求出求出这个偏移值。
p= V*(1-S)
详解:这里变量p求的是实际RGB中的最小值,即min。
根据“概念二”得知,1-S求的是不饱和度,则1-S求的是饱和度最低的值,也就是RGB中三个分量中与255相差大的值。这个值乘以明度,即是RGB三个分量中最小的那个值。
q= V*(1-f*s)
详解:这里变量q求的是实际RGB中的最大值,即max。
根据“概念一”可以得知,与最大值相关的,就是H,f是h在指定色相区域内的偏移角度,f*s是RGB三个分量中最大的那个值的饱和度,1-f*s得到的就是最大值不饱和度,再乘以明度即是RGB三个分量中最大的那个值。
t=V*(1-(1-f)*s)
详解:这里变量q求的是实际RGB中的中间值,即med。
根据“概念一”可以得知,与最大值相关的,就是H,f是h在指定色相区域内的偏移角度,而根据“概念4”可以得知,1-f就是反向偏移,反向偏移求的就是中间值,(1-f)*s就是反向偏移的中间值乘以饱和度。(1-(1-f)*s)就是反向偏移的中间值的不饱和度,最后再把明度乘进去,V*(1-(1-f)*s),求的就是RGB的中间值。
当把max,med,min,三个对应RGB中分量的值求出来之后,开始判断条件,分别代入。
根据上面的式子,我们可以知道,判断H位置的变量是h1,
结合“概念一”中提到的,红色、绿色、蓝色分别位于0°、120°、240°;0°到60°之间绿色分量均匀增加,60°到120°之间红色分量均匀减少,等等。以及表格的内容。
那么就可以将max,med,min,找到对应的位置,填入RGB的三个分量中去。
这里不作详细解释,上面图片里的式子写的很清楚,自行理解。
以下是查阅(参考资料1)获得的RGB转HSV算法公式,其中求V的算法是错误的。
因为(参考资料1)中没有说明算法中的max及min的相关说明。所以我在这里困惑了很久。
通过推导(参考资料2)的过程,可以得知,max和man分别代表的是两个变量,这两个变量取自RGB值中的(r,g,b)三个数值中的最大值及最小值。
那么算法代表的意义就明确起来。
undefined if max=min
详解:当最大值等于最小值时,h可以为任意值,不会影响实际展示出来的颜色。因为RGB值中的(r,g,b)三个数值都相等。如果RGB的三个数值相等,那么色彩的范围在色彩模型中就是圆心的位置,即为黑白灰,与色相H无关。
60°*(g-b)/(max-min)+0° if max =r and g>=b
详解:根据上面总结的规律可以得知如果最大值为r,那么H的取值范围就是300°-360°或0°-60°,且如果要满足g大于等于b,假设g=b,那么g和b只能为0。当g>b时,H的取值范围就变为0°-60°,且角度一定是R向G进行偏移,这个时候只需要计算R向着G的偏移度数,即可求出H的值。 g-b为差值,max-min是差值分量,(g-b)/(max-min)是求偏移分量,60*(g-b)/(max-min)是求在这个取色范围中偏移度数。60*(g-b)/(max-min)+0°是求所在色彩区域距离0°的差值,需要加上。
60°*(g-b)/(max-min)+360° if max =r and b>g
详解:此处是求R值的第二种情况,最大值为r,那么H的取值范围就是300°-360°或0°-60°,且如果要满足b大于g,当g>b时,H的取值范围就变为300°-360°,且角度一定是B向R进行偏移,这个时候只需要计算B向着R的偏移度数,即可求出H的值。 g-b为差值,max-min是差值分量,(g-b)/(max-min)是求偏移分量,60*(g-b)/(max-min)是求在这个取色范围中偏移度数。60*(g-b)/(max-min)+360°是求所在色彩区域距离0°的差值,需要加上。
60°*(b-r)/(max-min)+120° if max =g
详解:根据上面总结的规律可以得知如果最大值为g,那么H的取值范围就是60°-240°。 b-r为差值,max-min是差值分量,(b-r)/(max-min)是求偏移分量,60*(b-r)/(max-min)是求在这个取色范围中偏移度数,可以为负数,正数代表G向着B偏移,负数代表G向着R偏移。60*(g-b)/(max-min)+120°是求所在色彩区域距离0°的差值,需要加上。
60°*(r-g)/(max-min)+240° if max =b
详解:根据上面总结的规律可以得知如果最大值为b,那么H的取值范围就是120-300°。 r-g为差值,max-min是差值分量,(r-g)/(max-min)是求偏移分量,60*(r-g)/(max-min)是求在这个取色范围中偏移度数,可以为负数,正数代表B向着R偏移,负数代表B向着G偏移。60*(r-g)/(max-min)+240°是求所在色彩区域距离0°的差值,需要加上。
0 if max = 0
详解:当RGB中的最大值都为0,那么其他两个值,也一定为0,此时的颜色为黑色。无饱和度,所以饱和度也为0。
(max-min)/max
详解:这里max代表的是颜色的饱和度最高值,min代表的是颜色饱和度的最低值,因为max与RGB分量的最大值255更为接近,而min与RGB分量的最小值0更为接近。
这里将max作为这个RGB值分量的最大值,即饱和度的最高值,那么min就代表的是不饱和度,将饱和度的最大值减去不饱和度,得到的即是饱和度的数值。然后将饱和度的数值除以RGB中的最大分量max,得到的百分比,即使饱和度S的值。
上面公式图的V的算法应该是错误的,
实际应该是:V=max/255
详解:根据“概念三”可以得知,与明度相关的值只有max,所以直接用max除以RGB颜色值的最大分量,得到的百分比,即是明度。
完。(以上内容不保证完全正确,仅供参考)
❽ 如何计算RGB数字图像处理 亮度的亮度值
可以将RGB颜色空间转为YIQ色彩空间,其中Y是指颜色的明视度,即亮度:Y = 0.299R + 0.587G + 0.114B。
RGB是通过红绿蓝启隐三原色来描述颜色的颜色空间,R=Red、G=Green、B=Blue。YIQ色彩空间属于NTSC系统。这里Y是指颜色的明视度,即亮度。其实Y就是图像灰度值,I和Q都指的是指色调,即描述图像色彩与饱和度的属性。
YIQ颜色空间具有能将图像中的亮度分量分离提悄笑厅取出来的优点,并且YIQ颜色空间与RGB颜色空间之间是线性变换的关系。RGB和YIQ的对应关系的方程式表示:Y = 0.299R + 0.587G + 0.114B。
(8)rgb通用算法扩展阅读:
颜色空间转换特特点:
1、RGB颜色空间采集到的彩色图像,一般就是被分成R、G、B的成分加以保存的。然而,自然环境下对亮度比较敏感。而RGB颜色空间的分量与亮度密切相关,即只要亮度升旁改变,3个分量都会随之相应地改变。所以,RGB颜色空间适合于显示系统,却并不适合于图像处理。
2、HSI变换与RGB变换都是非线性变换,耗时多,无法满足机器手进行采摘工作的实时性需要。L*a*b*颜色空间可以直接通过使用颜色空间内的几何距离来做不同颜色之间的比较分析,所以可以有效地、方便地用在测量较小的色差上。但因为是非线性变换,所以计算量比较大。
❾ 求一个计算RGB颜色值的算法,色差要尽量大,从黑色到白色之间可以计算出来100个以上颜色,尽量用C++
在RGB颜色模型下,要100个颜色设一个变量从0到0x1000000之间分成100递增即可,颜色差值最大。
用javaapplet最简演示,附图。从黑到白100个颜色块
=====
importjava.applet.Applet;
importjava.awt.Color;
importjava.awt.Graphics;
publicclassTestextendsApplet{
=1802199483736051124L;
publicintnum_of_colors;
@Override
publicvoidinit(){
num_of_colors=100;//如果要多可以设得更多
}
@Override
publicvoidpaint(Graphicsg){
introw_max=(int)Math.sqrt(num_of_colors);
intcol_w=getWidth()/row_max;
intx=0,y=0;
intcd=(int)(0x1000000L/num_of_colors);
intc=0;
for(intn=0;n<num_of_colors;n++){
g.setColor(newColor(c));
g.fillRect(x,y,col_w,col_w);
c+=cd;
if(n%row_max==0&&n>0){
x=0;
y+=col_w;
}elsex+=col_w;
}
}
}
❿ rgb颜色表怎么算的
RGB就是red green blue三原色相互搭配组成的颜色。每种颜色分为0-255,RGB 0,0,0就是黑的。255,255,255是白的。255,0,0红色,0,255,0绿色,0,0,255蓝色。其他颜色就是搭配出来的了。比如255,255,0,就是黄色。