Сшивание изображений занимает больше времени с Seamfinder и Exposurecompensator

Я пытаюсь сшить изображения и код, над которым я работаю, он использует SeamFinder и ExposureCompensator вместе с другими функциями. Но во время выполнения кода эти два занимают так много времени. Есть ли другая альтернатива или есть способ улучшить производительность.

Ptr<ExposureCompensator> compensator = ExposureCompensator::createDefault(expos_comp_type);
compensator->feed(corners, images_warped, masks_warped);

seam_finder = makePtr<GraphCutSeamFinder>(GraphCutSeamFinderBase::COST_COLOR);
seam_finder->find(images_warped_f, corners, masks_warped);

Выше приведены две функции, которые требуют времени.
Пожалуйста, помогите мне в решении проблемы.
Заранее спасибо.

3

Решение

Известно, что ImageStitching через OpenCV работает медленно во многих случаях. Может быть, вы можете дать Открытая МП Параллель выстрел здесь и противостоять задержке, с которой вы сталкиваетесь, используя распараллеливание.

OpenMP состоит из набора компиляторов #pragmas это контролировать, как работает программа. Прагмы разработаны таким образом, что даже если компилятор их не поддерживает, программа все равно выдаст правильное поведение, но без какого-либо параллелизма.

В тех случаях, когда разные итерации циклов не имеют ничего общего друг с другом, поэтому они делают основной целью распараллеливания. OpenMP эффективно использует эти общие характеристики программы, поэтому очень легко позволить программе OpenMP использовать несколько процессоров, просто добавив несколько строк директив компилятора в ваш исходный код.

Если вы выполняете цикл, в котором сшивается набор изображений, вы можете убедиться, что сшивание для каждого набора изображений выполняется параллельно.

#pragma omp parallel for
for( ... )
{
// Image-stitching algorithms go here.
}

Эта директива компилятора #pragma opm parallel for говорит компилятору автоматически распараллеливать цикл for с OpenMP.

Для нециклов или просто разделов кода вы можете сделать что-то вроде этого:

#pragma omp parallel sections
{
#pragma omp section
{
DoSomething();
}

#pragma omp section
{
DoSomethingElseParallely();
}
}

Я знаю, что ответ может не помочь вам напрямую, но может дать вам несколько путей для поиска.

Вы можете узнать больше об использовании Цикл OpenMP Параллелизм а также OpenMP: разделы перед его использованием.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]