Определение длины волны немного сложно, и, как отметил Гоблин, не всегда возможно (другой пример - это цвет, получаемый смешиванием равного количества красного и синего света. У фиолетового нет единой длины волны).
Но если все, что вы хотите сделать, это определить цвет по имени, то модель HSV будет хорошей для использования.HSV - это Hue (где цвет находится вокруг цветового круга), Saturation (количество цвета в отличие от оттенка черного / серого / белого) и Value (насколько яркий или темный пиксель).В этом случае Hue, вероятно, именно то, что вы хотите.
Если вы используете язык .NET, то вам повезло.См. Метод Color.GetHue , который делает всю работу за вас.
В противном случае см. HSV в Википедии для получения более подробной информации.
По существу, если у вас есть 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)
Надеюсь, что помогает.