С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
#1

Программа на C++, которая переводит цветовую модель RGB в модель HSV - C++

13.03.2014, 17:52. Просмотров 1033. Ответов 6
Метки нет (Все метки)

Всем привет! Я - начинающий программист. Мне нужна ваша помощь. Мне нужно сделать программу на C++, которая переводит цветовую модель RGB в модель HSV. С чего начать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 17:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа на C++, которая переводит цветовую модель RGB в модель HSV (C++):

Преобразование изображения из цветовой модели RGB в модель HSL - C++
Всем доброго времени суток! Я учусь на программиста, и мне очень нужна ваша помощь. Что нужно для преобразования изображения из...

Программа, которая переводит числа в слова - C++
Здрасти всем. Есть код: #include <conio.h> #include <stdio.h> #include <iostream> #include <stdlib.h> string...

Программа которая переводит из 2ой системы в 10ую - C++
Создать программу которая переводит из двоичной системы в десятичную. P.S вообще то я знаю как переводить 2ую в 10ую, ну например -...

Не компилится программа, которая переводит градусы Цельсия по Фарангейту и наоборот - C++
Это 2 моя прога, первая была простая которая выводила Hello World так что не судите если код плохой,еще учусь. Нужно написать...

программа которая переводит введенные числа в буквенную начертанию (надо немного исправить) - C++
Уважаемые программисты, помогите исправить программу, программа должна введенное с клавиатуры число переводить в письменное начертание,...

Модель гонки черепахи и зайца (программа даже не запускается..) - C++
условие прикреплено #include <iostream> #include <clocale> #include<conio.h> #include <STDLIB.H> using std::srand; using...

6
gunslinger
случайный прохожий
1146 / 764 / 197
Регистрация: 20.07.2013
Сообщений: 2,138
13.03.2014, 18:08 #2
С теории.
http://ru.wikipedia.org/wiki/RGB
http://ru.wikipedia.org/wiki/HSV_%28...D0%BB%D1%8C%29 (см. RGB → HSV)
2
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
13.03.2014, 18:10  [ТС] #3
Спасибо за ссылки, а как программу свою начать? С чего, вернее. Как эти формулы правильно написать?
0
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
13.03.2014, 18:34 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
45
46
47
48
49
50
51
52
53
#include <iostream>
using namespace std;
 
int max(int r, int g, int b);
int min(int r, int g, int b);
 
int main() {
 
    int r, g, b;
    cin >> r >> g >> b;
 
    int h, s, v;
    int p = max(r,g,b);
    int t = min(r,g,b);
 
    if (p == t)
        h = 0;
    else if (p == r && h >= b)
        h = 60 * ((g - b) / (p - t));
    else if (p == r && g < b)
        h = 60 * ((g - b) / (p - t)) + 360;
    else if (p == g)
        h = 60 * ((b - r) / (p - t)) + 120;
    else if (p == b)
        h = 60 * ((r - g) / (p - t)) + 240;
 
    if (p == 0)
        s = 0;
    else s = 1 - t/p;
 
    v = p;
 
    cout << h << " " << s << " " << v << "\n";
    cin.get();
    cin.get();
    return 0;
}
 
int max(int r, int g, int b) {
    if (r > g && r > b)
        return r;
    else if (g > r && g > b)
        return g;
    else return b;
}
 
int min(int r, int g, int b) {
    if (r < g && r < b)
        return r;
    else if (g < r && g < b)
        return g;
    else return b;
}
1
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
14.03.2014, 18:53  [ТС] #5
Спасибо, у тебя ошибка была, вместо h должна g быть в строке:
C++
1
else if (p == r && h >= b)
Теперь еще вопрос:
Уже сколь своих методов перепробовал, но, почему то считает неправильно, когда я введу значения 1 1 0. Должен получиться ответ 60 100 0 , а получается 0 0 0. Что это?
0
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
14.03.2014, 22:56 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cstdlib>
 
#define MIN3(x,y,z)  ((y) <= (z) ? \
                          ((x) <= (y) ? (x) : (y)) \
                      : \
                          ((x) <= (z) ? (x) : (z)))
 
#define MAX3(x,y,z)  ((y) >= (z) ? \
                         ((x) >= (y) ? (x) : (y)) \
                     : \
                         ((x) >= (z) ? (x) : (z)))
 
struct rgb_color {
    double r, g, b;    // 0.0 and 1.0
};
 
struct hsv_color {
    double hue;        // 0.0 and 360.0 
    double sat;        // 0.0 (gray) and 1.0
    double val;        // 0.0 (black) and 1.0 */
};
 
struct hsv_color rgb_to_hsv(struct rgb_color rgb) {
 
    struct hsv_color hsv;
    double rgb_min, rgb_max;
    rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
    rgb_max = MAX3(rgb.r, rgb.g, rgb.b);
    hsv.val = rgb_max;
    if (hsv.val == 0) {
        hsv.hue = hsv.sat = 0;
        return hsv;
    }
 
    // Норм. значение 1
    rgb.r /= hsv.val;
    rgb.g /= hsv.val;
    rgb.b /= hsv.val;
    rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
    rgb_max = MAX3(rgb.r, rgb.g, rgb.b);
    hsv.sat = rgb_max - rgb_min;
    if (hsv.sat == 0) {
        hsv.hue = 0;
        return hsv;
    }
    
    // Насыщение 1
    rgb.r = (rgb.r - rgb_min)/(rgb_max - rgb_min);
    rgb.g = (rgb.g - rgb_min)/(rgb_max - rgb_min);
    rgb.b = (rgb.b - rgb_min)/(rgb_max - rgb_min);
    rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
    rgb_max = MAX3(rgb.r, rgb.g, rgb.b);
 
    if (rgb_max == rgb.r) {
        hsv.hue = 0.0 + 60.0*(rgb.g - rgb.b);
        if (hsv.hue < 0.0) {
            hsv.hue += 360.0;
        }
    } else if (rgb_max == rgb.g) {
        hsv.hue = 120.0 + 60.0*(rgb.b - rgb.r);
    } else /* rgb_max == rgb.b */ {
        hsv.hue = 240.0 + 60.0*(rgb.r - rgb.g);
    }
    return hsv;
}
 
 
int main(int argc, char* argv[]) {
    struct rgb_color rgb;
    struct hsv_color hsv;
    std::cin >> rgb.r;
    std::cin >> rgb.g;
    std::cin >> rgb.b;
    hsv = rgb_to_hsv(rgb);
    std::cout << "Hue: " << hsv.hue << std::endl;
    std::cout << "Saturation: " << hsv.sat << std::endl;
    std::cout << "Value: " << hsv.val << std::endl;
 
    std::cin.get();
    std::cin.get();
    return 0;
}
1
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
16.03.2014, 23:40  [ТС] #7
Немного исправил, доработал. Формулы как раз те, что и надо! Спасибо!
0
16.03.2014, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 23:40
Привет! Вот еще темы с ответами:

Программа "Динамическая модель солнечной системы" - C++
Дали задание, а я в этом не разбираюсь ни как!!! Программа &quot;Динамическая модель солнечной системы&quot;. В программе используются объекты...

Программа которая переводит дюймы в сантиметры и сантиметры в дюймы. В чем ошибка? - C++
в меню когда пишешь что то кроме 1 или 2 оно не выводит то что написано в default #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Функция, которая переводит км/ч в м/с - C++
Опишите функцию int vms(int Vkmh) которая переводит значение Vkmh из км/ч в м/с. Используйте эту функцию в другой функции int...

Напишите программу, которая переводит гривны в $ - C++
напишите программу, которая переводит гривны в $, DM c комментариями?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.