Форум программистов, компьютерный форум CyberForum.ru

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

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

C++ Программа "Динамическая модель солнечной системы"
Программа, которая переводит числа в слова C++
программа которая переводит введенные числа в буквенную начертанию (надо немного исправить) C++
C++ Модель гонки черепахи и зайца (программа даже не запускается..)
C++ Программа которая переводит из 2ой системы в 10ую
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gunslinger
случайный прохожий
 Аватар для gunslinger
1098 / 716 / 184
Регистрация: 20.07.2013
Сообщений: 1,973
13.03.2014, 18:08     Программа на C++, которая переводит цветовую модель RGB в модель HSV #2
С теории.
http://ru.wikipedia.org/wiki/RGB
http://ru.wikipedia.org/wiki/HSV_%28...D0%BB%D1%8C%29 (см. RGB → HSV)
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
13.03.2014, 18:10  [ТС]     Программа на C++, которая переводит цветовую модель RGB в модель HSV #3
Спасибо за ссылки, а как программу свою начать? С чего, вернее. Как эти формулы правильно написать?
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
13.03.2014, 18:34     Программа на C++, которая переводит цветовую модель RGB в модель HSV #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;
}
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
14.03.2014, 18:53  [ТС]     Программа на C++, которая переводит цветовую модель RGB в модель HSV #5
Спасибо, у тебя ошибка была, вместо h должна g быть в строке:
C++
1
else if (p == r && h >= b)
Теперь еще вопрос:
Уже сколь своих методов перепробовал, но, почему то считает неправильно, когда я введу значения 1 1 0. Должен получиться ответ 60 100 0 , а получается 0 0 0. Что это?
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
14.03.2014, 22:56     Программа на C++, которая переводит цветовую модель RGB в модель HSV #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 23:40     Программа на C++, которая переводит цветовую модель RGB в модель HSV
Еще ссылки по теме:

Не компилится программа, которая переводит градусы Цельсия по Фарангейту и наоборот C++
Преобразование изображения из цветовой модели RGB в модель HSL C++
C++ Программа которая переводит дюймы в сантиметры и сантиметры в дюймы. В чем ошибка?

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

Или воспользуйтесь поиском по форуму:
Kabahol
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 5
16.03.2014, 23:40  [ТС]     Программа на C++, которая переводит цветовую модель RGB в модель HSV #7
Немного исправил, доработал. Формулы как раз те, что и надо! Спасибо!
Yandex
Объявления
16.03.2014, 23:40     Программа на C++, которая переводит цветовую модель RGB в модель HSV
Ответ Создать тему
Опции темы

Текущее время: 18:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru