Форум программистов, компьютерный форум 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 числа 1 \le N, M \le 100 - количество строк и столбцов массива. Далее в N строках содержится по M чисел - элементы массива, все числа не превосходят по модулю 200000. Формат выходных данных... подробнее

Показать сообщение отдельно
petrov522
1 / 1 / 0
Регистрация: 12.12.2009
Сообщений: 26
26.05.2016, 10:57     Работа с большим объемом данных
Имеется загруженное изоображение с помощью 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 и там перегружать ==, но не знаю, как записать вычисление хэш функции в этом случае.

Или попросту в массиве это вычислить. Подскажите, как тогда. Что-то результаты не очень((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru