【发布时间】:2018-12-12 08:37:19
【问题描述】:
如何使用基于 OpenCL 的特征检测器?根据源代码 (here),有 AKAZE、FAST 和 ORB 的 opencl 版本。我想知道如何在 C++ 中使用它们?
我尝试导入#include <opencv2/core/ocl.hpp>,然后我还设置了cv::ocl::setUseOpenCL(true);,为了进行完整性检查,我做了cv::ocl::haveOpenCL()。这样做我可以确认我已经构建了支持 OpenCL 的 OpenCV。
话虽如此,我尝试将所有 cv::Mat 转换为 cv::UMat。现在程序在detector->detectAndCompute(umat, cv::noArray(), kp1, des1); 崩溃。我正在使用 AKAZE。
控制台上的错误是:
OpenCV(4.0.0-dev) 错误:在 glob_rec 文件 e:\cv4.0\ 中找不到请求的对象(无法打开目录:C:\Users\PC\AppData\Local\Temp\opencv) opencv\modules\core\src\glob.cpp,第 267 行
调用堆栈错误说:
- _err "无法打开目录:C:\Users\PC\AppData\Local\Temp\opencv" const std::basic_string,std::分配器
&
我已经这样初始化它了:
detector = cv::AKAZE::create();
detector->setThreshold(akaze_thresh);
这是使用 OpenCL 版本的 AKAZE 的正确方法吗?如果是,我该如何解决这个错误?如果没有,我该如何使用 OpenCL 版本的 AKAZE?
【问题讨论】:
-
我不确定 OpenCV 是否有对 AKAZE 的 OpenCL 支持,他们确实使用 CUDA 支持它,但这可能在 4.0 中有所改变。您是否尝试改用 ORB 或 FAST?
-
@RickM。您能否确认 akaze 是否仍可使用 cuda 支持?或者 cuda akaze 可用的 opencv 的最新版本是哪个?我没有尝试过 ORB 和 FAST,我没有在 CPU 本身上使用这 2 个实现预期的结果。
-
你说的 CPU 本身没有达到预期的结果是什么意思?你想要的结果是什么?速度?
-
@RickM。速度和准确性。使用 AKAZE 我得到了 100 多场比赛,使用 ORB 我几乎没有得到 5 场以上的比赛,而 FAST 也或多或少与 ORB 相同。由于 akaze 原来这么好,我想要一个更快的版本。在核心 i9 上检测和匹配大约需要 70 毫秒。我想把它降到最低。
标签: opencv