OpenCV使用OMP完成并行运算,在使用AdaBoost检测的时候,在cascadedetect.cpp 里面,大量使用

    parallel_for_(Range(0, stripCount), CascadeClassifierInvoker( *this, processingRectSize, stripSize, yStep, factor,candidatesVector, rejectLevels, levelWeights, false, currentMask, &mtx) );

语句。

策略对应的机制:

CascadeClassifierInvoker继承自于 ParallelLoopBody ,实现parallel_for_( )语句。

class CascadeClassifierInvoker : public ParallelLoopBody

CV2.4.3中自带的calcOpticalFlowPyrLK函数也用parallel_for重写过了,之前我一直认为parallel_for就是用来并行计算的,之前也自己写了一些用parallel_for实现的算法。

直到今天在opencv官网中看到别人的提问,才发现parallel_for实际上是serial loop (普通循环结构),而parallel_for_才是parallel loop(OpenCV官网answer),用以实现TBB或者OpenCL并行。

参考文章:OpenCV中parallel_for 和 parallel_for_学习笔记

函数定义在parallel.cpp里面,定义为:

/* ================================   parallel_for_  ================================ */void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes)
{
#ifdef CV_PARALLEL_FRAMEWORKif(numThreads != 0){ProxyLoopBody pbody(body, range, nstripes);cv::Range stripeRange = pbody.stripeRange();#if defined HAVE_TBBtbb::parallel_for(tbb::blocked_range<int>(stripeRange.start, stripeRange.end), pbody);
#elif defined HAVE_CSTRIPESparallel(MAX(0, numThreads)){int offset = stripeRange.start;int len = stripeRange.end - offset;Range r(offset + CPX_RANGE_START(len), offset + CPX_RANGE_END(len));pbody(r);barrier();}#elif defined HAVE_OPENMP#pragma omp parallel for schedule(dynamic)for (int i = stripeRange.start; i < stripeRange.end; ++i)pbody(Range(i, i + 1));#elif defined HAVE_GCDdispatch_queue_t concurrent_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_apply_f(stripeRange.end - stripeRange.start, concurrent_queue, &pbody, block_function);#elif defined HAVE_CONCURRENCYif(!pplScheduler || pplScheduler->Id() == Concurrency::CurrentScheduler::Id()){Concurrency::parallel_for(stripeRange.start, stripeRange.end, pbody);}else{pplScheduler->Attach();Concurrency::parallel_for(stripeRange.start, stripeRange.end, pbody);Concurrency::CurrentScheduler::Detach();}#else#error You have hacked and compiling with unsupported parallel framework#endif}else#endif // CV_PARALLEL_FRAMEWORK{(void)nstripes;body(range);}
}

其中使用的:

tbb::parallel_for(tbb::blocked_range<int>(stripeRange.start, stripeRange.end), pbody);

使用TBB重写 parallel_for 完成使用TBB并行加速。

OpenCV:OpenCV中的 parallel_for 和opencv parallel_for_相关推荐

  1. 干货 | tensorflow模型导出与OpenCV DNN中使用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 OpenCV DNN模块 Deep N ...

  2. opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像

    我在 java中使用opencv 2.4.10检测到图像中的面部 我把我的面部检测代码. import org.opencv.core.Core; import org.opencv.core.Mat ...

  3. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

  4. Android开发——Android Studio中配置及使用OpenCV示例

    from: http://www.mobile-open.com/2015/86176.html 本文主要讲述了Android Studio中配置及使用OpenCV示例,现在整理出来分享给Androi ...

  5. 【opencv】3.在一个opencv窗口中显示多个视频界面、画箭头、画掉头箭头

    1.在一个opencv窗口中显示不同视频界面 /** * @brief 在一个opencv窗口win_name中显示不同视频界面 * @param img_1 和 img_2 是分别是取自不同视频中的 ...

  6. OpenCV序列中创建矩阵cv :: Mat的实例(附完整代码)

    OpenCV序列中创建矩阵cv :: Mat的实例 OpenCV序列中创建矩阵cv :: Mat的实例 OpenCV序列中创建矩阵cv :: Mat的实例 #include "opencv2 ...

  7. OpenCV将GIS数据加载到OpenCV容器中的实例(附完整代码)

    OpenCV将GIS数据加载到OpenCV容器中的实例 OpenCV将GIS数据加载到OpenCV容器中的实例 OpenCV将GIS数据加载到OpenCV容器中的实例 #include "o ...

  8. OpenCV视频中的人脸标志检测

    OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...

  9. OpenCV图像中的人脸界标检测

    OpenCV图像中的人脸界标检测 图像中的人脸界标检测 简介 命令参数的描述{tutorial_face_training_parameters} 源代码 检测结果 图像中的人脸界标检测 简介 此应用 ...

最新文章

  1. 电脑磁盘空间不足怎么办_IT干货 丨 电脑C盘存储空间不足怎么办?
  2. start 与 run 区别
  3. 叮咚,系统检测到 npm 有更新,原理揭秘!
  4. 腾讯视频怎么设置全速下载模式
  5. python time时间戳_time和datetime时间戳---python
  6. 计算机系统的3t性能目标是什么,计算机系统结构习题.doc
  7. 写给嵌入式方向的某些同学 - 基于WINCE系统的程序开发[不完整版]
  8. 用计算机数字语言研究中医理论,试论中医基础理论数字模型.pdf
  9. 读懂了鱼玄机,就读懂了爱情
  10. systemverilog 中的always_comb, always_latch, always_ff
  11. java 微博sdk_使用微博SDK工具weibo4j进行java微博自动回复
  12. ffmpeg录制桌面,麦克风和系统声音独立成2路音轨
  13. 大数据惊人:凌晨4点的中国人都在做什么?
  14. ES学习系列02-创建索引
  15. Litjson与JsonUtility读取json文件
  16. 秒杀抢单系统软件架构优化思路
  17. 筋膜枪之原理及方案浅析
  18. 基于微信的图书管理系统(小程序+JavaSSM)
  19. mysql用sql语句将表中学生_用sql语句创建学生表如何做
  20. python入门爬取360网站的‘历史上的今天’

热门文章

  1. 高并发学习(二)安全发布对象/不可变对象/线程封闭
  2. Spring Boot集成JPA的Column注解命名字段无效的问题
  3. 腾讯云发布专有云TCE矩阵,让企业用上金融级合规专有云
  4. jQuery获取所有父级元素及同级元素及子元素的方法
  5. WebLogic中修改AdminServer及Managed Server的端口
  6. 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
  7. 吉林白山:“五脏俱全”的智能WiFi路灯点亮智慧城市
  8. ORA-01658:无法为表空间XXX中的段创建initial区
  9. 使用github时因fatal: remote origin already exists错误,无法提交
  10. 统计字符串中单词个数