如何使用OpenCV的parallel_for_并行化你的代码

该教程介绍了如何利用OpenCV的parallel_for_并行化代码,以提高效率。通过绘制曼德尔布罗特集的示例,展示了如何将顺序代码转换为并行计算,同时解释了并行化的先决条件和适用任务类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英文链接:How to use the OpenCV parallel_for_ to parallelize your code

目的

本教程的目的是向您展示如何使用OpenCV parallel_for_框架轻松地并行化代码。为了说明这个概念,我们将编写一个程序来利用几乎所有可用的CPU负载绘制曼德尔布罗特集。完整的教程代码在这里。如果你想要更多关于多线程的信息,你将不得不参考参考书或课程,因为本教程的目的是保持简单。

先决条件

第一个先决条件是用并行框架构建OpenCV。在OpenCV 3.2中,以下并行框架是按顺序提供的:

  • Intel线程构建块(应该显式启用第三方库)
  • C=并行C/ c++编程语言扩展(应显式启用第三方库)
  • OpenMP(集成到编译器中,应该显式启用)
  • 苹果GCD(系统范围,自动使用(仅限苹果))
  • Windows RT并发性(系统范围,自动使用(仅适用于Windows RT))
  • Windows并发(运行时的一部分,自动使用(仅Windows - MSVC++ >= 10))
  • Pthreads(如果可用)

如您所见,OpenCV库能使用几个并行框架。一些并行库是第三方库,必须显式地构建和启用CMake(例如TBB, C =),其他的则自动可用(例如APPLE GCD),但是,您应该能够直接访问并行框架,或者通过在CMake和rebuild库中启用选项来实现。

第二个(弱)先决条件与你想要完成的任务有关,因为并不是所有的计算都适合/可以被设置为并行运行。为了保持简单,可以拆分为多个基本操作、没有内存依赖关系(没有可能的竞争条件)的任务可以轻松地并行。计算机视觉处理通常是容易并行的,因为大多数时候一个像素的处理不依赖于其他像素的状态。

简单的示例:绘制曼德尔布罗特集(Mandelbrot set)

我们将使用绘制曼德尔布罗特集的示例来展示如何从规则的顺序代码中轻松地修改代码来并行化计算。

原理

Mandelbrot集合定义被数学家Adrien Douady命名为向数学家Benoit Mandelbrot致敬。它在数学领域之外很出名,因为图像表示是一类分形的一个例子,它是一个数学集合,在每个尺度上都显示出一个重复的模式(甚至,曼德尔布罗特集是自相似的,因为整个形状可以在不同的尺度上重复出现)。要获得更深入的介绍,可以查看相应的Wikipedia文章。这里,我们将介绍绘制Mandelbrot集的公式(来自Wikipedia文章)。

Mandelbrot集合是二次映射迭代下轨道为0的复平面上 c c c的值的集合
{ z 0 = 0 z n + 1 = z n 2 + c \begin{cases} z_0 = 0 \\ z_{n+1} = z_n^2 + c \end{cases} { z0=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值