Помогите доделать код к датчику цвета

Вопрос решился , всем спасибо за информативность и участие) :wink:

1 лайк

Я позволил себе пронумеровать тезисы, чтобы понятно было, что к чему относится.

  1. Вся разрядность цветов - это 16777216 по 3 байта в каждом. Итого: более 50 млн. чисел. Как Вы с таким объемом собираетесь работать вручную?
  2. Это не будет работать в общем случае. Пример: “съем” дает (0, 10, 0) - это, безусловно, зеленый. В ближайшей области окажется (10, 0, 10) - это, безусловно, фиолетовый.
  3. Сравнение не приведет к желаемому результату. Пример: (0, 100, 0) - это, безусловно, зеленый, но результат сравнения окажется отрицательным.
  4. А где здесь обучение?

PS. Да, я не отрицаю, что алгоритм простейший, но он, увы, нерабочий.

это уже третий вариант от @smagluk за время обсуждения… ждем следующую версию. Надо сказать, что от раза к разу он (алгоритм) улучшается

Мне показалось, что алгоритм один и тот же, только к нему добавляются … даже не уточнения, а просто конкретизирующие замечания. Например, в последнем - откуда брать те самые a1…b3, которые фигурируют в первом.
Но чем больше конкретизации, тем очевиднее становится неработоспособность алгоритма.
Более того, представляется очевидным, что формулировка ограничений на абсолютные значения составляющих цвета принципиально непродуктивна: условия нужно формировать на основе их относительной величины. Ну, например, что величина G должна минимум вдвое превосходить остальные величины (это как пример, не гарантирую, что это будет работать).

Считаю вашу идею с переводом цвета в HSV лучшей в ветке . Скорее единственной работоспособной.

Нет, можно и непосредственно в RGB, но это требует несколько более обширных знаний от пользователя о структуре цвета. А преобразование RGB-HSV легко гуглится и работа с HSV интуитивно понятнее.

PS. Кстати, мне лень, но ТС я бы посоветовал попробовать и предложенный мною в последнем сообщении алгоритм, т.е. что-то вроде
if(((G/2)>B) && ((G/2)>R))

А если ESP применить? Или Raspberry? У них памяти много

А кстати, зачем все эти заморочки? Кто нибудь этот датчик в руках держал? Он, кроме RGB, прекрасно определяет цветовую температуру в кельвинах. С точностью плюс-минус 10 градусов. Которая практически не зависит от освещённости объекта, в отличие от RGB.

Одна строка:
colorTemp = tcs.calculateColorTemperature(r, g, b);

Проверил на светодиодных лампочках ( на них написана температура) и на разноцветных бумажках.

Осталось выяснить, как коррелируют цветовая температура и цвет.

На 500р.
Заказчика устраивает соотношение цена/качество.

жёлтая бумажка даёт 2300

В первую очередь интересно, сколько даст белый цвет. С точки зрения “научной базы” столько же, сколько и зеленый.
Это к тому, что датчик должен не только реагировать на зеленый, но еще и НЕ реагировать на НЕ зеленый.

1 лайк

Вот .

Тут вот пишут:

Цветовая температура – это температура абсолютно черного тела, при которой оно испускает излучение того же цветового тона, что и рассматриваемое излучение. Проще говоря, температура 5000К – это цвет, который приобретает абсолютно черное тело при нагревании его до 5000К. Цветовая температура оранжевого цвета – 2000К, это означает, что абсолютно черное тело необходимо нагреть до температуры 2000К, чтобы оно приобрело оранжевый цвет свечения.

И даже есть формула Планка, которая описывает кривую в цветовом пространстве, соответствующую цветовой температуре.

Вот данная кривая.

И, похоже, у нас есть проблема - кривая не проходит через область зелёного цвета. Тел, получивших зелёный оттенок вследствии нагрева, тоже не припоминаю.

Хотя, в стране бармалеевой все иначе, видать, и за 500р можно даже в таком заказчика убедить.

1 лайк

Попробуй. Тебе там работы на 15 минут

Не нашёл критерий, а нашёл бумажку, которая содержит достаточно других оттенков, кроме зелёного, чтобы “показать” цифирь 3200. Другая зеленая бумажка легко даст 4000 или 2500.

Сходи в магазин и посмотри на включенную лампочку с температурой 3000К.

Расскажешь потом - есть там сочная зелень или нет.

И да, меня беспокоит вот такое исполнение без наличия активированного сознания. Хотя, понимаю - раньше за 200р мозги дурил, а тут 500. Ударила кровь в голову, отключила ум.

Ну хочишь, я тебе ещё своих 500р пришлю?

Посмотрел на лампочку, у меня такая дома есть. Нету зелени. Вообще. Наверное, всё таки разогревается до 3000 градусов, поэтому через зелень не переходит. А ты зелёные звёзды видел? Я нет.

Хочу. Но не мне пришлешь, а Чечако. И подтверждение сюда выложишь.

А он напишет программу?
А почему не бывает зелёных звёзд? И синих