OpenCV:OpenCV中的 parallel_for 和opencv parallel_for_
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_相关推荐
- 干货 | tensorflow模型导出与OpenCV DNN中使用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 OpenCV DNN模块 Deep N ...
- opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像
我在 java中使用opencv 2.4.10检测到图像中的面部 我把我的面部检测代码. import org.opencv.core.Core; import org.opencv.core.Mat ...
- opencv python 中cv2.putText()函数的用法
opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...
- Android开发——Android Studio中配置及使用OpenCV示例
from: http://www.mobile-open.com/2015/86176.html 本文主要讲述了Android Studio中配置及使用OpenCV示例,现在整理出来分享给Androi ...
- 【opencv】3.在一个opencv窗口中显示多个视频界面、画箭头、画掉头箭头
1.在一个opencv窗口中显示不同视频界面 /** * @brief 在一个opencv窗口win_name中显示不同视频界面 * @param img_1 和 img_2 是分别是取自不同视频中的 ...
- OpenCV序列中创建矩阵cv :: Mat的实例(附完整代码)
OpenCV序列中创建矩阵cv :: Mat的实例 OpenCV序列中创建矩阵cv :: Mat的实例 OpenCV序列中创建矩阵cv :: Mat的实例 #include "opencv2 ...
- OpenCV将GIS数据加载到OpenCV容器中的实例(附完整代码)
OpenCV将GIS数据加载到OpenCV容器中的实例 OpenCV将GIS数据加载到OpenCV容器中的实例 OpenCV将GIS数据加载到OpenCV容器中的实例 #include "o ...
- OpenCV视频中的人脸标志检测
OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...
- OpenCV图像中的人脸界标检测
OpenCV图像中的人脸界标检测 图像中的人脸界标检测 简介 命令参数的描述{tutorial_face_training_parameters} 源代码 检测结果 图像中的人脸界标检测 简介 此应用 ...
最新文章
- 电脑磁盘空间不足怎么办_IT干货 丨 电脑C盘存储空间不足怎么办?
- start 与 run 区别
- 叮咚,系统检测到 npm 有更新,原理揭秘!
- 腾讯视频怎么设置全速下载模式
- python time时间戳_time和datetime时间戳---python
- 计算机系统的3t性能目标是什么,计算机系统结构习题.doc
- 写给嵌入式方向的某些同学 - 基于WINCE系统的程序开发[不完整版]
- 用计算机数字语言研究中医理论,试论中医基础理论数字模型.pdf
- 读懂了鱼玄机,就读懂了爱情
- systemverilog 中的always_comb, always_latch, always_ff
- java 微博sdk_使用微博SDK工具weibo4j进行java微博自动回复
- ffmpeg录制桌面,麦克风和系统声音独立成2路音轨
- 大数据惊人:凌晨4点的中国人都在做什么?
- ES学习系列02-创建索引
- Litjson与JsonUtility读取json文件
- 秒杀抢单系统软件架构优化思路
- 筋膜枪之原理及方案浅析
- 基于微信的图书管理系统(小程序+JavaSSM)
- mysql用sql语句将表中学生_用sql语句创建学生表如何做
- python入门爬取360网站的‘历史上的今天’
热门文章
- 高并发学习(二)安全发布对象/不可变对象/线程封闭
- Spring Boot集成JPA的Column注解命名字段无效的问题
- 腾讯云发布专有云TCE矩阵,让企业用上金融级合规专有云
- jQuery获取所有父级元素及同级元素及子元素的方法
- WebLogic中修改AdminServer及Managed Server的端口
- 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
- 吉林白山:“五脏俱全”的智能WiFi路灯点亮智慧城市
- ORA-01658:无法为表空间XXX中的段创建initial区
- 使用github时因fatal: remote origin already exists错误,无法提交
- 统计字符串中单词个数