opencv 是不是在高斯模糊上使用了一些加速技术(即 opencl)?
Posted
技术标签:
【中文标题】opencv 是不是在高斯模糊上使用了一些加速技术(即 opencl)?【英文标题】:Did opencv use some acceleration technology(i.e. opencl) on gaussian blur?opencv 是否在高斯模糊上使用了一些加速技术(即 opencl)? 【发布时间】:2019-04-17 17:07:01 【问题描述】:我用 C++ 和 neon 实现了我自己的高斯滤波器。
伪代码:
oneDimensionBlur(src, temp1, width, height) //implement by C++
transposeMatrix(temp1, temp2, width, height) //implement by neon
oneDimensionBlur(temp2, temp1, height, width)
transposeMatrix(temp1, dst, height, width)
但是 cv::GaussianBlur() 几乎比我的实现快 8 倍!我几乎绝望的分析结果。所以我想问一下opencv是否在高斯模糊上使用了任何加速技术?我尝试跟踪opencv源代码但失败了。
【问题讨论】:
【参考方案1】:OpenCV 可以明确地使用并行技术来加速cv::GaussianBlur
。查看here 的实现。如您所见,该文件中至少有 3 个函数的并行化版本,使用 OpenCL、IPP 或 OpenVX。
有一些功能可以禁用优化,例如setUseOptimized
或setUseOpenCL
。有关控制多线程的更多方法,请参见this 页面底部的函数。
最后,从源代码构建 OpenCV、禁用 OpenCL 等所有东西并在单个线程上运行它可能会更容易(使用 setNumThreads
)。
【讨论】:
谢谢。但是如何在编译源码的时候禁用所有的加速技术呢? 我认为使用cmake -D WITH_TBB=OFF -D WITH_OPENMP=OFF -D WITH_IPP=OFF ..
应该将它们全部禁用。也尝试使用setNumThreads
。使用ps
检查您的应用程序正在使用的线程数,以确保其正常工作。以上是关于opencv 是不是在高斯模糊上使用了一些加速技术(即 opencl)?的主要内容,如果未能解决你的问题,请参考以下文章