我有一个项目可以对像素的颜色进行分类。无论是红色,紫色,橙色还是色轮中的任何颜色。我知道像素有超过1600万种颜色组合。但我能够阅读一个网页,说明我可以使用颜色波长来完成我的项目。请给我使用RGB值计算波长的公式。谢谢!
答案 0 :(得分:8)
纯色具有波长(任何单色LED都具有特定波长)。 红色,绿色和蓝色各自具有波长范围。但是,当您制作RGB颜色时,将这些波长加在一起,这样就不会为您提供新的波长。眼睛无法区分由一个波长组成的黄色和添加红色和绿色的黄色(眼睛是如何工作的)。 我建议阅读色彩理论
答案 1 :(得分:6)
用于显示器的RGB RGB映射到红色绿色和蓝色光的3个独立水平,因此存在(大多数)3个不同波长的任何一个被感知的颜色。
但如果您可以将RGB颜色值转换为其等效HSL,则H部分(Hue)是主要颜色,只要波长,如果,则准备忽略饱和度(将其视为白度)。
基于此,您可以近似基于其H值的颜色的支配波长。
红光波长约为630-740nm,紫罗兰波长约为380-450nm。
答案 2 :(得分:5)
制定波长有点棘手,正如Goblin所说,并非总是可行(另一个例子是通过混合等量的红光和蓝光获得的颜色。紫色没有单一波长。)
但是,如果你想要做的就是按名称识别颜色,那么HSV模型将是一个很好用的模型。 HSV是Hue(颜色在色轮周围),饱和度(有多少颜色而不是黑色/灰色/白色)和值(像素的亮度或暗度)。在这种情况下,Hue可能就是你想要的。
如果您使用的是.NET语言,那么您很幸运。请参阅为您完成所有工作的Color.GetHue Method。
否则,请参阅HSV at Wikipedia了解详情。
本质上,如果你有R,G和B作为浮点范围从0.0到1.0(而不是从0到255的整数),那么:
M = max(R, G, B)
m = min(R, G, B)
C = M-m
if M = m then H' is undefined (The pixel is some shade of grey)
if M = R then H' = (G-B)/C mod 6
if M = G then H' = (B-R)/C + 2
if M = B then H' = (R-G)/C + 4
当将RGB转换为HSV时,你将H'乘以60度,但为了你的目的,H'可能很好。它将是一个从0到6(几乎)的浮点数。 0是红色(6)。 1为黄色,0到1之间的值在红色和黄色之间以阴影显示。所以0.5就是橙色。重要的标志是:
0 - Red
1 - Yellow
2 - Green
3 - Cyan
4 - Blue
5 - Purple
6 - Red (again)
希望有所帮助。
答案 3 :(得分:0)
http://en.wikipedia.org/wiki/Visible_spectrum
有可能。往上看。灰色背景显然使它更容易。你可能会自己得到类似的东西,甚至可以改进它。但要准确地做到这一点将花费大笔资金。你需要一个比色专家,一个校准的监视器和观察环境(因为你的像素的主波长只是意味着它在你校准的观察环境中在你校准的监视器上接近的单色波长)。这一切都将是几千美元。在维基百科上显示的上述链接所做的工作似乎并不准确,但它可能就是你想要的。
答案 4 :(得分:0)
只需将 RGB 转换为 HSV,然后将 HSV 值转换为度数,这就是答案:
650 - 250 / 270 * D
其中 D 是度数。
考虑...
紫罗兰的波长为 380–450 nm,& 蓝色波长为 450–495 nm,& 绿色波长为 495-570 nm,& 黄色的波长为 570–590 nm,& 橙色的波长为 590–620 nm,& 红色的波长为 620–750 nm, 那么你只需要检查它是否在这些范围内,然后你就可以对它进行分类。 希望这会有所帮助!