3

我正在尝试拼接图像和我正在处理的代码,它使用 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);

以上是需要时间的两个功能。请帮助我解决问题。提前致谢。

4

1 回答 1

0

众所周知,通过 OpenCV 的 ImageStitching 在许多情况下都很慢。也许您可以在这里试一试Open MP Parallel,并通过使用并行化来应对您面临的延迟。

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 loop ParallelismOpenMP: Sections的用法,然后再使用它。

于 2018-02-08T09:19:20.080 回答