30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
1

Определить необходимое конечное множество цветов и оттенков

02.09.2016, 19:44. Показов 1155. Ответов 28
Метки нет (Все метки)

Входные данные: цветовая гамма
Выходные данные:
-RGB;
-HSV;
-нечеткое наименование.

Хочу сделать на Visual Studio 2013 C++. Такие проекты и близко не стояли, язык знаю, но без понятый как получить входные данные, как их парсить чтобы выход был как в задании. Подскажите хоть что-нибудь, библиотеки, методы, классы, чем программа будет сканировать изображение. Да и не понятно что именно на выходе...просто словесное название цвета? Сроки короткие

Добавлено через 2 часа 59 минут
знаю пару функций OpenGL которые считывают фото. Ведь они вроде и работают с RGB - сохраняют массив цветов, или я путаю
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2016, 19:44
Ответы с готовыми решениями:

Упрощение оттенков цветов
Добрый день. Назрела такая проблема. Нужно программно перевести все существующие оттенки цветов в...

RGB - сколько там вариантов цветов и оттенков?
Незнаю, правильно ли я определился с разделом Оператором floodfill к примеру, можно закрасить...

Получить из множества цветов спектра новое множество путем исключения трех цветов
Задано множество, содержащее все цвета светового спектра от красного до фиолетового. ...

Конечное упорядоченное множество
Прошу прощения, но наверное склероз и шиза скосила меня окончательно. Есть конечное множество...

28
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
02.09.2016, 20:12 2
Ничего не понял в Вашем сообщении. Если необходимо определить конечное количество цветов для модели RGB, то это делается так: в байте 8 бит, т.к. RGB - это 3 байта, то перемножаем 256*256*256=16777216 - стандартное число TrueColor/HightColor.
Идем дальше. Если Вам нужно отсканировать изображение, сканируйте стандартными средствами Windows, что Вам мешает? Или хотите сделать свою такую же программу?
Если честно, не понял задание, перефразируйте как-то по-другому.
0
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 20:45  [ТС] 3
DemolitionMan, да свою программу. На вход поступает изображение(цветовая гамма). Здесь что то не понятно? Программа распознает все цвета и выводит их:
-RGB;
-HSV;
-нечеткое наименование.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
02.09.2016, 20:56 4
Цитата Сообщение от MuslimPalit Посмотреть сообщение
На вход поступает изображение(цветовая гамма). Здесь что то не понятно?
Непонятно в каком виде поступают данные.

Цитата Сообщение от MuslimPalit Посмотреть сообщение
знаю пару функций OpenGL которые считывают фото.
Мне кажется что вы сами не понимаете о чём говорите.
1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:00  [ТС] 5
castaway, у меня есть задача, идет на вход изображение (формат может быть разный например bmp). Нужно определить цвета данного изображения

Добавлено через 53 секунды
могу полностью лист заданию скинуть, как и ко мне передали
0
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:05  [ТС] 6
вот задание как есть
Миниатюры
Определить необходимое конечное множество цветов и оттенков  
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
02.09.2016, 21:10 7
MuslimPalit, если вам нужно просто перевести изображение из цветовой модели RGB в HSV, то вот вам способ преобразования.
У вас слишком много "как?" в одной теме, разделите её, например, так: "Чтение изображения формата BMP", "Преобразование цветовой модели RGB в HSV" и т.п....

Добавлено через 3 минуты
Цитата Сообщение от MuslimPalit Посмотреть сообщение
могу полностью лист заданию скинуть, как и ко мне передали
Да на хрена он мне. Мне за это не платят.
2
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:14  [ТС] 8
castaway, да я сохранил себе способ перевода уже пару часов назад. Я написал все сразу чтобы мне накидали функции на которые обратить внимание.

Добавлено через 2 минуты
вы сказали не понимаете задание. Я не прошу делать задание, а хочу узнать какие функции есть для работы с изображениями на входе. Я в этом направлении вообще не работал, но работал с OpenGL
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
02.09.2016, 21:26 9
MuslimPalit, конкретно что не получается?

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от MuslimPalit Посмотреть сообщение
вы сказали не понимаете задание.
Ну вы же понимаете, что эта фотография не добавит ясности.

1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:32  [ТС] 10
castaway, я хотел узнать есть ли функция в OpenGL, которая сохраняет цвета (пиксели) в массив .

Добавлено через 2 минуты
castaway, я запутался, полез вперед. Я даже не понял как будут размещаться данные цветовой гаммы с входной картинки.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
02.09.2016, 21:34 11
Цитата Сообщение от MuslimPalit Посмотреть сообщение
castaway, я хотел узнать есть ли функция в OpenGL, которая сохраняет цвета (пиксели) в массив .
Есть. glReadPixels.
1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:42  [ТС] 12
castaway, а мне обязательно лезть в такие подробности чтобы написать эту программу?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
02.09.2016, 21:48 13
Цитата Сообщение от MuslimPalit Посмотреть сообщение
castaway, а мне обязательно лезть в такие подробности чтобы написать эту программу?
Откуда ж мне знать. Вы задали вопрос - я ответил. А суть вашего задания я до сих пор не понял.
Я вам котегорически советую уточнить все неясные моменты по заданию у того кто вам его дал.
1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
02.09.2016, 21:53  [ТС] 14
castaway, http://ziggi.org/chtenie-bmp-v-c-versiya-2/ я забыл прикрепить, вот такие подробности

Добавлено через 1 минуту
мда пост надо закрыть пока сам не разберусь что к чему!
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.09.2016, 12:27 15
Лучший ответ Сообщение было отмечено MuslimPalit как решение

Решение

Я не понял что значит нечеткое наименование? Преподавателей зачеркнул - не спалил.
Если есть наименование цвета, есть его четкое представление в формате RGB. Ну из RGB в HSV уже понятно как перевести. А что правда существуют функции сканирования в OpenGL, сколько изучаю OpenGL - не знал. Привелите, пожалуйста, эти функции.
Ну если в Билдере писать(Borland C++ Builder 6) обращатся к цветам нужно по пикселям:
C++
1
2
int Color = clBlack;  //или здесь тип TColor
Canvas->Pixels[x][y] = Color;
Добавлено через 3 часа 48 минут
Вот написал Вам код. За снову использовал страницу: https://ru.wikipedia.org/wiki/... .86.92_HSV.
Перевод из RGB в HSV:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
TColor F;
unsigned char R, G, B;
double Rd, Gd, Bd, H, S, V, max, min;/*Rd - R double*/
bool case0, case1, case2, case3, case4;
case0 = case1 = case2 = case3 = case4 = false;
 
F = Image1->Canvas->Pixels[10][10];
Timer1->Enabled = false;
 
R = F&0xFF;
G = (F >> 8)&0xFF;/*G-Govno*/
B = (F >> 16)&0xFF;
 
Rd = R/255;
Gd = G/255;
Bd = B/255;
 
if((Rd >= Gd)&&(Rd >= Bd)) {max = Rd; case1 = true; case2 = true;}
else if((Gd >= Rd)&&(Gd >= Bd)) {max = Gd; case3 = true;}
else {max = Bd; case4 = true;}
if((Rd <= Gd)&&(Rd <= Bd)) min = Rd;
else if((Gd <= Rd)&&(Gd <= Bd)) min = Gd;
else min = Bd;
V = max;
 
if(max == 0) S = 0;
else S = 1 - (min/max);
 
if(max == min) case0 = true;
 
if(case0) H = 0;
if((case1)&&(Gd>=Bd)) H = 60*(Gd-Bd/max-min);
if((case2)&&(Gd<Bd)) H = 60*(Gd-Bd/max-min) + 360;
if(case3) H = 60*(Bd-Rd/max-min) + 120;
if(case4) H = 60*(Rd-Gd/max-min) + 240;
Правда он выводит исключение Debugger Exeption Notification: Invalid floating point operation в строке
if((case1)&&(Gd>=Bd)) H = 60*(Gd-Bd/max-min);
Не знаю почему он это делает, так вроде все правильно написано.
Ну специалисты или знающие люди может подскажут в чем причина.
Заточено под C++ Builder 6, как обычно.
Билдер не видит не одну переменную, не могу отладить.
1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
03.09.2016, 12:53  [ТС] 16
DemolitionMan, да я разобрался, функции в OpenGL отрисовки изображений. Я имел ввиду считывание данных с bmp. Нашел пару сайтов где хорошо описана структура изображения. Ну и взял куски кода чтобы считать цвета изображений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// bitmap file header
typedef struct {
    unsigned short bfType;
    unsigned int   bfSize;
    unsigned short bfReserved1;
    unsigned short bfReserved2;
    unsigned int   bfOffBits;
} BITMAPFILEHEADER;
 
// bitmap info header
typedef struct {
    unsigned int   biSize;
    unsigned int   biWidth;
    unsigned int   biHeight;
    unsigned short biPlanes;
    unsigned short biBitCount;
    unsigned int   biCompression;
    unsigned int   biSizeImage;
    unsigned int   biXPelsPerMeter;
    unsigned int   biYPelsPerMeter;
    unsigned int   biClrUsed;
    unsigned int   biClrImportant;
    unsigned int   biRedMask;
    unsigned int   biGreenMask;
    unsigned int   biBlueMask;
    unsigned int   biAlphaMask;
    unsigned int   biCSType;
    CIEXYZTRIPLE   biEndpoints;
    unsigned int   biGammaRed;
    unsigned int   biGammaGreen;
    unsigned int   biGammaBlue;
    unsigned int   biIntent;
    unsigned int   biProfileData;
    unsigned int   biProfileSize;
    unsigned int   biReserved;
} BITMAPINFOHEADER;
 
// rgb quad
typedef struct {
    unsigned char  rgbBlue;
    unsigned char  rgbGreen;
    unsigned char  rgbRed;
    unsigned char  rgbReserved;
} RGBQUAD;
Добавлено через 4 минуты
DemolitionMan, вроде бы я набрал всего по чуть чуть, но так и не понял что за "нечеткое наименование". Думаю может это прозрачность, как в painte когда цвет хватаешь пилюлей там появляется кодировка RGB, HSV, прозрачность(альфа). Меньше всего что предполагаю, что это может быть название цвета: красный, белый, фиолетовый и т.д.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.09.2016, 14:49 17
Так Вы все-таки согласились с тем, что в OpenGL нет функций считывания фото?
"Нечеткое наименование" - как раз наверное это и есть название цвета.
1
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
03.09.2016, 16:20  [ТС] 18
DemolitionMan, да я согласился. Потому что я нашел в статье, что не читает файлы. Не понял почему в данном коде второй и третий параметр неправильный выдает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void RGB2HSV(unsigned int &hue, unsigned char &sat, unsigned char &val, unsigned char r, unsigned char g, unsigned char b) {
    double h, rc, gc, bc, dmax;
    unsigned char s, v;
    unsigned char minc, maxc;
    
    maxc = (r > g) ? ((r > b) ? r : b) : ((g > b) ? g : b);
    minc = (r < g) ? ((r < b) ? r : b) : ((g < b) ? g : b);
    s = 0; // Насыщенность
 
    if (maxc) {
        s = (maxc - minc) * 255 / maxc;
    }
    sat = s;
    val = maxc;
 
    if (!s) { // Ахроматический цвет
        hue = 0;
    }
    else { // Хроматический цвет
        dmax = maxc - minc;
        rc = (maxc - r) / dmax; /* rc - удаленность */
        gc = (maxc - g) / dmax; /* цвета от красного */
        bc = (maxc - b) / dmax;
 
        if (r == maxc) { // Цвет между желтым и пурпурным
            h = bc - gc;
        }
        else if (g == maxc) { // Цвет между голубым и желтым
            h = 2 + rc - bc;
        }
        else { // Цвет между пурпурным и голубым
            h = 4 + gc - rc;
        }
        h *= 60.0;
        if (h < 0.0) {
            h += 360.0;
        }
        hue = h;
        if (hue == 360) {
            hue = 0;
        }
    } // if (!s)
} // RGB 2 HSV
Добавлено через 1 минуту
значение set и val неправильные на выводе а вот hue вроде бы правильно, либо где-то с преобразованием ошибка

Добавлено через 28 минут
R- 3a G- 54 B- 37 H- 113 S- 88 V- 84 как так вроде бы все правильно, но должно быть H- 113 S- 34 V- 32
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
03.09.2016, 16:24 19
Что такое 2 и 3 параметр? Какие у них имена?
0
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
03.09.2016, 16:32  [ТС] 20
догнал я в проценты не перевел оказывается

Добавлено через 1 минуту
DemolitionMan, s, v
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2016, 16:32
Помогаю со студенческими работами здесь

Конечное, счетное или континуальное множество?
Конечное, счетное или континуальное множество бесконечных последовательностей 0 и 1, в которых...

Как доказать, что множество конечное или счётное?
Любое множество открытых интервалов на действительной прямой, которые попарно не пересекаются есть...

Доказать, что конечное множество не может быть равномощным своему подмножеству
Используя понятие мощности конечного множества, равномощности, решить задачу на доказательство....

Соединить конечное множество точек на плоскости замкнутой линией с вершинами в этих точках
Нужна помощь со сборкой задачи. Задача: Соединить конечное множество точек на плоскости...


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

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

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