Я пытаюсь написать расширение в netlogo для кирпича Nxt. Для подключения кирпича я использую Lejos. У меня проблема с датчиком цвета. Я хочу написать простой метод, который возвращает цвет датчика в виде числа, такого как желтый: 1, красный: 2 и т. д. Но двигатель датчика всегда возвращает разные цвета RGB на одной и той же поверхности. Например, я положил его на желтую бумагу, цвета RGB: [236 189 104], [247 202 108].. если бы он возвращал уникальные числа RGB для одинаковых цветов поверхности, я бы классифицировал их в соответствии с диапазоном цветов RGB и дал уникальный номер для каждого цвета. У вас есть идеи, как я могу это сделать? Кроме того, он не будет работать на разных поверхностях. Мне будет достаточно сделать это только для моих цветов бумаги (желтый, синий, зеленый). Спасибо.
Группировка цветов RGB для блока NXT
Ответы (1)
Если я правильно понял, что вы имеете в виду, метод java.awt.Color.RGBtoHSB может вам помочь. Такой Java-код:
float[] hsb = Color.RGBtoHSB(red, green, blue, null);
float hue = hsb[0];
(где red
, green
и blue
переменные, содержащие результат датчика)
... даст вам "оттенок" вашего цвета как float
между 0 и 1, которого должно быть достаточно, чтобы увидеть, является ли это оттенком желтого, синего, зеленого или чего-то еще, если вы определите соответствующие диапазоны. Это должно быть очень приблизительно примерно так:
Yellow: 0.1 < hue < 0.2
Blue: 0.5 < hue < 0.7
Green: 0.25 < hue < 0.45
... но не верьте мне на слово! Вы должны поэкспериментировать, чтобы увидеть, в каком диапазоне остается ваш сенсор, когда он находится над желтой бумагой и т. д.
person
Nicolas Payette
schedule
23.05.2012
Спасибо, Николас. Используя диапазон оттенков и различия rgb каждого цвета, я решил свою проблему.
- person Ecrin; 28.05.2012