关于opencv遍历像素速度的提高方案

1、

二值化算法经过测试后基本可以,但是在运动中会出现无法检测特征图像的地方,另外执行的速度还是不快。因为代码中有两个双层嵌套的for循环,这是给遍历图像用的。为了优化for循环遍历像素占用的时间,我的实验过程如下:

2、

我在网上查询到可以用opencv 的LUT查表法来简化遍历像素的时间,这个可以比指针快,后来经过阅读了一定网上的资料,才发现利用LUT必须知道原图像与目标图像像素的对应才能实现。

3、

#pragma omp parallel for:这里用到了openMP:就是在对应的for循环前加上#pragma,同时开启openMP支持.
建议:把循环次数多的放在内存可以减少代码运行的时间。

4、

c:parallel_for:这里用到了intel TBB的并行开发原理,就是在使用这个函数来实现for循环的时候,它可以将for循环分给几个内核来处理,可以大大减少程序运行的时间。但是在我配置好的之后,我做了一下测试,发现不用parallel_for程序执行的时间反而更短,但是CPU的占用率确实100%,这是我百思不得其解.

5、

在查找了大量的文献之后,我发现了一个大问题,更具opencv的官方answer显示,parallel_for是serial loop,而parallel_for_才是真正的parallel loop。

6、

在编程的过程中,我为了检验parallel_for_的循环次数是否正确,我在循环中加入了count++;结果令我感到诧异的是,count的值竟然和我给的循环次数不一样。在这个难题上,我花费了大量的时间来查找原因。在经过一定的研究后,我发现了问题:在并行开发中,有多个内核来执行count++的语句,但由于速度过快,导致当count被放一个核到累加器A中的时候,另一个核也要用这个变量,这就出现了问题,问题的现象目前是count的累加次数减少,具体问题还待研究。

7、

验证:为了验证e的结论是否正确,你可以在你的count++的前后加一个进程锁将多核转变为单核,你会发现结果的正确性。
时间匆忙代码以后补上

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值