Ускорение обработки изображений OpenCV

406
24 апреля 2017, 04:52

История такая. В программе понадобился урезанный редактор для изображений, в котором есть ползунки, меняющие значение для гаммы, контраста и т.д. Обрабатываемые изображения имеют размер порядка 6000 на 4000 пикселей. Все бы ничего, но обработка, например, гаммы затягивается на пол секунды, но с некоторой хитростью сокращается вдвое. Например гамма:

        QTime time;
        time.start();
        double gamma = 0.5;
        double G = 1/gamma;
        double preCalc[256];
        for (int i = 0; i <= 255; i++)
        {
            preCalc[i] =  pow((i / 255.0), G) * 255; // для ускорения просчитываем все заранее (чтобы не повторять это вычисление миллионы раз вместо 255)
        }

        for( int y = 0; y < tempImg.rows; y++ )
        {
            for( int x = 0; x < tempImg.cols; x++ )
            {
                for( int c = 0; c < 3; c++ )
                {
                    tempImg.at<cv::Vec3b>(y,x)[c] =
                    cv::saturate_cast<uchar>( preCalc[tempImg.at<cv::Vec3b>(y,x)[c]] );
                }
            }
        }
        qDebug() << time.elapsed();

В результате, насчитывается 1/3 секунды. А представьте, добавим еще расчет яркости контрастности все... А фотошоп это изображение обрабатывает в реальном времени при изменении ползунка вне зависимости от масштаба. Я, конечно, не забываю, что ребята в ADOBE очень многое могут. Вопрос в том, какую хитрость они применили? Т.к. дело происходит на ноутбуке и я не уверен, что используется gpu.

READ ALSO
Неправильный вывод программы в С++

Неправильный вывод программы в С++

Есть функция, написанная на С++, которая должна раскладывать числа от 1 до N на простые составляющие - то есть, например, 2 - 2, 3 - 3, 4 - 2 и 2, и так...

264
Структуры в файле с++

Структуры в файле с++

Создаю структуруВвожу данный

299
Блокировка с двойной проверкой

Блокировка с двойной проверкой

В книге Энтони Уильямса "Параллельное программирование на C++ в действии" рекомендуется заменять использование упомянутого в заголовке паттерна...

300