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

Работа с большим объемом данных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление значения функции, проверка попадания точки в область на плоскости http://www.cyberforum.ru/cpp-beginners/thread1745739.html
Дано вещественное число а. Для функции y=f(x), график которой приведен ниже вычислить f(а). Составить алгоритм и написать программу для решения задачи. Решить 2 задачи нужно
C++ Подсчет количества одинаковых слов http://pastebin.com/s8Ewa9Dp // Zadanie2.cpp: определяет точку входа для консольного приложения. // /* 7. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не... http://www.cyberforum.ru/cpp-beginners/thread1745728.html
C++ Хроматическое число графа, заданного К-списком
Нагуглил кучу всякого, но примера рабочего кода не нашел. Если у кого то завалялось, пожалуйста, будьте так добры, или какие нибудь ссылки полезные. А то столько нарыл, но чтоб толково и вкратце не...
Определить, пересекаются ли прямая и окружность C++
Задана окружность с центром в точке О(x0,y0) и радиусом R0 и прямая y=ax+b. Определить, пересекаются ли прямая и окружность. При положительном ответе найти точки пересечения.
C++ Найти точку соприкосновения двух окружностей http://www.cyberforum.ru/cpp-beginners/thread1745707.html
Как можно найти точку соприкосновения двух окружностей, если заданы их координаты центра и радиус? У меня движутся две окружности навстречу друг к другу, под углом, и я не могу прописать условие их...
C++ Посчитать среднее арифметическое элементов массива 2,Двумерные массивы. Задача 1.6 Во входном файле задан целочисленный двумерный массив. Посчитать среднее арифметическое его элементов. Формат входных данных Первая строка входного файла содержит 2... подробнее

Показать сообщение отдельно
petrov522
1 / 1 / 0
Регистрация: 12.12.2009
Сообщений: 26

Работа с большим объемом данных - C++

26.05.2016, 10:57. Просмотров 124. Ответов 4
Метки (Все метки)

Имеется загруженное изоображение с помощью opencv.
Задача: вывести цвета изображения с из колличеством.
Цвет задаю структурой, хранящей 3 int, RGB соответственно.
Цвета считаются одинаковыми, если евклидовое расстояние между ними меньше eps.
Все пиксели загоняю в map, выводится примерно 200 тыс цветов с их колличеством.
Вопрос: как учесть цвета с помощью евклидового расстояния в этом map?

Добавлено через 10 часов 15 минут
Вот структура:

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
struct ObjColor
{
    int B;
    int G;
    int R;
 
    bool operator< (const ObjColor& other) const
    {   
        //double dist = sqrt((this->B - other.B)*(this->B - other.B) + (this->G - other.G)*(this->G - other.G) + (this->R - other.R)*(this->R - other.R));
 
        //if (dist>30)
        {
            // сортировка идет от меньшего к большему
            if (this->B < other.B)
            {
                return true;
            }
            if (this->B == other.B)
            {
                if (this->G < other.G)
                {
                    return true;
                }
                if (this->G == other.G)
                {
                    return (this->R < other.R);
                }
            }
        }       
        return false;
    }       
 
};
Ее записываю в map:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
map<ObjColor, double> Class1::CountMyColor(IplImage *Image)
{
    map <ObjColor, double> color;
 
    ObjColor temp;
 
    for (int y = 0; y < image->height; y += 1) {
        uchar* ptr = (uchar*)(image->imageData + y * image->widthStep);
        for (int x = 0; x < image->width; x++) {
            temp.B = ptr[3 * x];
            temp.G = ptr[3 * x + 1];
            temp.R = ptr[3 * x + 2];
            color[temp]++;
        }
 
    }
    return color;
}
Теперь из множества ключей map. Надо отобрать те, расстояние, между которыми < eps, и слить в один цвет, с подсчетом общего количества пикселей для слитого цвета.

Расстояние определяется по формуле:
D := SQRT ((R2-R1)^2+(G2-G1)^2+(B2-B1)^2)
Как это лучше сделать? Думал, перегрузить у структуры < таким образом, чтобы считалось автоматически. Возможно ли это? В закомментированном коде структуры пробовал это.

Или может лучше записывать изначально в unordered_map и там перегружать ==, но не знаю, как записать вычисление хэш функции в этом случае.

Или попросту в массиве это вычислить. Подскажите, как тогда. Что-то результаты не очень((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru