Перейти к содержимому
Compvision.ru
Smorodov

Быстрое попиксельное применение унарной операции.

Recommended Posts

Нашел интересный способ параллелить попиксельную операцию (здесь тип элемента CV64FC1, при желании легко меняется на другой):

// --------------------------------------------------------
// this class is for OpenCV ParallelLoopBody
// --------------------------------------------------------
class Parallel_pixel_opencv : public ParallelLoopBody
{
private:
    double *p;
public:
    Parallel_pixel_opencv(double* ptr) : p(ptr) {}

    virtual void operator()(const Range &r) const
    {
        for (register int i = r.start; i != r.end; ++i)
        {
            p[i] = -(double)tanh(p[i]*0.5); // Собственно сама операция
        }
    }
};
// --------------------------------------------------------
// Поэлементно берем гиперболический тангенс
// --------------------------------------------------------
Mat TanH(const Mat& src)
{
    Mat tmp = src.clone();
    int nElements = src.cols*src.rows;
    double* p3 = (double*)tmp.data;
    parallel_for_(Range(0, nElements), Parallel_pixel_opencv(p3));
    return tmp;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я может не уловил фишки, но в чем крутость этого сампла?:-)

Вроде бы стандартный способ распараллелить алгоритм на  OpenCV, не?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обычно я чистый openMP юзал напрямую, да и доках вроде не встречал (сейчас нашел в utilites.h здесь), вот и решил запостить может кто еще проглядел :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 12/31/2016 at 6:47 PM, Smorodov said:

Обычно я чистый openMP юзал напрямую, да и доках вроде не встречал (сейчас нашел в utilites.h здесь), вот и решил запостить может кто еще проглядел :)

OpenCV'шный parallel_for, кстати, умеет прям поверх тредов работать, без всяких openmp/tbb

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×