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。

有一些功能可以禁用优化,例如setUseOptimizedsetUseOpenCL。有关控制多线程的更多方法,请参见this 页面底部的函数。

最后,从源代码构建 OpenCV、禁用 OpenCL 等所有东西并在单个线程上运行它可能会更容易(使用 setNumThreads)。

【讨论】:

谢谢。但是如何在编译源码的时候禁用所有的加速技术呢? 我认为使用 cmake -D WITH_TBB=OFF -D WITH_OPENMP=OFF -D WITH_IPP=OFF .. 应该将它们全部禁用。也尝试使用setNumThreads。使用ps 检查您的应用程序正在使用的线程数,以确保其正常工作。

以上是关于opencv 是不是在高斯模糊上使用了一些加速技术(即 opencl)?的主要内容,如果未能解决你的问题,请参考以下文章

009-Opencv笔记-高斯双边模糊-矩阵掩膜

OpenCV——基础集锦

基于opencv3.0下的人脸识别和识别部分的高斯模糊处理

模糊处理(下)--高斯模糊,双边模糊以及实现一个简单的磨皮美颜效果(opencv学习记录--4)

比较中值模糊和高斯模糊对高斯噪声处理效果

OpenCv 026---高斯双边滤波