0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 43
1

Как определить разные оттенки красного?

20.05.2015, 19:21. Показов 1902. Ответов 12
Метки нет (Все метки)

Здравствуйте, я новичок на С++, так что может вопрос покажется глупым. Как определить разные оттенки красного цвета? На экране, я нахожу пиксель и если его цвет совпадает, происходит действие, но проблема в том что этот пиксель не всегда имеет определённый оттенок красного! Он может быть чуть светлее или наоборот очень тёмный.
Сейчас, я делаю так: (но этого не достаточно, т.к цвет может быть и "129, 54, 71" или "152, 75, 84" и.т.д)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
COLORREF minColor = RGB(222, 42, 34);
COLORREF maxColor = RGB(237, 185, 211);
 
GetColor = GetPixel(DC, 520, 142)
 
if(GetRValue(GetColor) >= GetRValue(minColor) && GetRValue(GetColor) <= GetRValue(maxColor) &&
GetGValue(GetColor) >= GetGValue(minColor) && GetGValue(GetColor) <= GetGValue(maxColor) &&
GetBValue(GetColor) >= GetBValue(minColor) && GetBValue(GetColor) <= GetBValue(maxColor))
{
     //...
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 19:21
Ответы с готовыми решениями:

Передать в переменную оттенки красного
Допустим есть If t = vbRed Then как переделать это не только vbRed ну и другие оттенки красного?

Определить количество шариков красного и зеленого цвета
2)Имеется N количество шариков. Для каждого шарика известен цвет. Определить количество шариков...

Определить постоянную вращения кварца для красного света
Кварцевую пластинку толщиной 3 мм, вырезанную перпендикулярно оптической оси, поместили между двумя...

Градиент или как получить оттенки серого цвета
Привет всем! Возник вопрос (нигде не могу найти ответ) Как использовать градиент цвета в Си? Мне...

12
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.05.2015, 19:36 2
Что конкретно нужно сделать? "Определить" - не формулировка.
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 43
20.05.2015, 20:07  [ТС] 3
Чтобы действие совершалось если пиксель стал красным, но не определённым красным цветом например (255,0,0) а разными оттенками красного, если он светлее\темнее и.т.д.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.05.2015, 20:12 4
C++
1
2
3
4
5
6
7
    BYTE r_min = 10;
    BYTE r_max = 100;
    BYTE r = GetRValue( color );
    if ( r >= r_min && r <= r_max )
    {
        ... попадает под диапазон ...
    }
0
Evg
Эксперт CАвтор FAQ
21245 / 8261 / 636
Регистрация: 30.03.2009
Сообщений: 22,606
Записей в блоге: 30
20.05.2015, 20:12 5
Цитата Сообщение от Overtroll Посмотреть сообщение
Как определить разные оттенки красного цвета?
Открываешь в программах типа фотошопа диаграмму для выбора цвета. Определяешь для себя границы того, что по твоему мнению является красным цветом, описываешь эту область (в 3-мерном пространестве) формулой
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 43
20.05.2015, 20:18  [ТС] 6
castaway, в моём примере это и так реализовано, а если цвет оттенка будет (153,0,0) ?
Evg, можно поподробнее я новичок и если бы разбирался с формулами, то помощи, я не просил бы.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.05.2015, 20:22 7
Цитата Сообщение от Overtroll Посмотреть сообщение
а если цвет оттенка будет (153,0,0) ?
Тогда всё еще проще.
C++
1
2
3
4
    if ( GetRValue( color ) )
    {
        ... оттенок красного ...
    }
0
22 / 22 / 50
Регистрация: 18.05.2015
Сообщений: 89
20.05.2015, 20:28 8
Лучший ответ Сообщение было отмечено castaway как решение

Решение

Чтобы цвет был красным, красная составляющая должна быть больше остальных как минимум на 10-20 единиц. Значит условие будет
#define RED_MORE 15;//Константа, определяющая минимальное значение доминирования красного, чем больше, тем уже диапазон воспринимаемых красных цветов
C++
1
2
3
4
if( (GetRValue(GetColor) >= GetGValue(GetColor)+RED_MORE) && ( (GetRValue(GetColor) >= GetBValue(GetColor)+RED_MORE)
{
//Цвет красный
};
Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Тогда всё еще проще.
Синяя или зеленая составляющие тоже могут быть в составе цвета и даже превышать красную, например,
(153,0,0) - красный, а (153,0,250) - уже совсем не красный, поэтому надо проверять все компоненты цвета
1
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 43
20.05.2015, 20:30  [ТС] 9
castaway, мне нужно оттенки красного, с вашим примером, так реагирует на все цвета и жёлтый\синий и.т.д.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
20.05.2015, 20:41 10
Overtroll, в жёлтом красный тоже присутствует, как и почти в любом другом.
R=50, G=40, B=60 --- это оттенок красного?
R=50, G=30, B=70 --- это оттенок красного?
R=50, G=29, B=70 --- это оттенок красного?
R=50, G=30, B=71 --- это оттенок красного?
Что в твоём понимании "оттенок красного"?
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
20.05.2015, 20:49 11
Цитата Сообщение от Overtroll Посмотреть сообщение
Evg, можно поподробнее я новичок и если бы разбирался с формулами, то помощи, я не просил бы.
Все цвета обычно представляются как комбинация некоторого количества красного, зеленого и синего. Можете считать что компьютер берет три краски и в баночке смешивает. Переход между цветами нечеткий, где-то будет граница "Васе кажется что это уже желтый, Пете кажется что это еще красный". Так что вам остается только методом тыка выяснять где у ваших глаз пролегает эта самая граница и вбивать ее в программу.
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 43
20.05.2015, 20:52  [ТС] 12
Кривокодер, спасибо Вам большое!
0
Evg
Эксперт CАвтор FAQ
21245 / 8261 / 636
Регистрация: 30.03.2009
Сообщений: 22,606
Записей в блоге: 30
20.05.2015, 21:41 13
Лучший ответ Сообщение было отмечено Overtroll как решение

Решение

Цитата Сообщение от Overtroll Посмотреть сообщение
Evg, можно поподробнее
А что конкретно не понятно? Ты можешь в 3-мерном пространстве описать то множество точек, которые в твоём понимании будут красным цветом? Любым способом (на словах, на картинках, в цифрах)? Или проблема в выборе такой области?

Добавлено через 3 минуты
Вот тут есть картинка кубика https://ru.wikipedia.org/wiki/RGB
Он отражает в 3-мерном пространстве соотношение между компонентами и конкретным цветом. Выдели в этом кубике ту часть, которая является красным. А потом любой математик тебе эту часть опишет формулой, хотя бы приблизительно

Добавлено через 8 минут
Как вариант цвет из формата RGB можно перевести в формат HSI (hue, saturation, intensiti - тон, насыщенности, интенсивность). Компонента hue (тон) будет отвечать за то, что в человеческом понимании называется "оттенок цвета". Т.е. в пространстве HSI ты можешь настраивать то, что является "красным цветом" оперируя только одной координатой, а не тремя

Вот тут описано про HSI: http://habrahabr.ru/post/181580/
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 21:41
Помогаю со студенческими работами здесь

КАК ОПРЕДЕЛИТЬ РАЗНЫЕ ЗНАКИ ИЛИ НЕТ????
Дана квадратная матрица. Найти MIN 1 и MIN 2 и если они имеют разные знаки, то поменять их местами....

Как определить оригинальные флешки microsd Silicon Power 16gB 10 class, так как имеют разные упаковки?
Здравствуйте! При покупке карты памяти microSDHC / microSDXC UHS-1 16gB возникла проблема,...

Как определить разные устройства через Raw Input?
Есть пульт ду для презентаций модель Hama &quot;Piccino&quot; Wireless Laser Presenter, на нем есть две...

Как определить вероятность, с которой случайная величина принимает разные значения?
Полное задание: С помощью функций из раздела Distributions рассчитать значения плотности и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru