OpenMP是一种应用于多处理器程序设计的并行编程处理方案,它提供了对于并行编程的高层抽象。仅仅须要在程序中加入简单的指令,就能够编写高效的并行程序,而不用关心详细的并行实现细节。减少了并行编程的难度和复杂度。也正由于OpenMP的简单易用性,它并不适合于须要复杂的线程间同步和相互排斥的场合。


OpenCV中使用Sift或者Surf特征进行图像拼接的算法。须要分别对两幅或多幅图像进行特征提取和特征描写叙述,之后再进行图像特征点的配对。图像变换等操作。不同图像的特征提取和描写叙述的工作是整个过程中最耗费时间的,也是独立 执行的,能够使用OpenMP进行加速。


下面是不使用OpenMP加速的Sift图像拼接原程序:


图像一:

OpenMP并行编程应用—加速OpenCV图像拼接算法


图像二:

OpenMP并行编程应用—加速OpenCV图像拼接算法


拼接结果 :

OpenMP并行编程应用—加速OpenCV图像拼接算法


在我的机器上不使用OpenMP平均耗时 4.7S。


使用OpenMP也非常easy。VS 内置了对OpenMP的支持。在项目上右键->属性->配置属性->C/C++->语言->OpenMP支持里选择是:

OpenMP并行编程应用—加速OpenCV图像拼接算法


之后在程序中增加OpenMP的头文件“omp.h”就能够了:


OpenMP中for制导指令用于迭代计算的任务分配,sections制导指令用于非迭代计算的任务分配,每一个#pragma omp section 语句会引导一个线程。

在上边的程序中相当于是两个线程分别运行两幅图像的特征提取和描写叙述操作。使用OpenMP后平均耗时2.5S,速度几乎相同提升了一倍。


相关文章:

  • 2021-09-24
  • 2022-01-08
  • 2022-12-23
  • 2021-05-22
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-13
  • 2022-02-07
  • 2022-01-01
  • 2021-09-11
  • 2022-12-23
  • 2022-12-23
  • 2022-01-11
相关资源
相似解决方案