Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenCV';OpenCL特征检测器_Opencv - Fatal编程技术网

使用OpenCV';OpenCL特征检测器

使用OpenCV';OpenCL特征检测器,opencv,Opencv,如何使用基于OpenCL的特征检测器?根据源代码(),有opencl版本的AKAZE、FAST和ORB。我想知道如何在C++中使用它们? 我尝试导入#include,然后我还设置了cv::ocl::setUseOpenCL(true)为了检查是否正常,我做了cv::ocl::haveOpenCL()。做这些我可以确认我已经用OpenCL支持构建了OpenCV 也就是说,我尝试将所有的cv::Mat转换为cv::UMat。现在程序在detector->detectAndCompute(umat,c

如何使用基于OpenCL的特征检测器?根据源代码(),有opencl版本的AKAZE、FAST和ORB。我想知道如何在C++中使用它们? 我尝试导入
#include
,然后我还设置了
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\OpenCV\modules\core\src\glob.cpp第267行中找不到请求的对象(无法打开目录:C:\Users\PC\AppData\Local\Temp\OpenCV)

callstack错误显示:

  • _错误“无法打开目录:C:\Users\PC\AppData\Local\Temp\opencv”const std::basic_字符串,std::分配器 &

我已将其初始化如下:

detector = cv::AKAZE::create();
detector->setThreshold(akaze_thresh);

这是使用OpenCL版本AKAZE的正确方法吗?如果是,如何修复错误?如果没有,我如何使用OpenCL版本的AKAZE?

结果表明,由于某种原因,OpenCL缓存文件夹没有生成(应该在这里-
C:\Users\User\AppData\Local\Temp\opencv
)。我创建了另一个项目并运行了一个简单的OpenCL程序:

UMat m(100,100,CV_8UC3, Scalar(100,200,0));
UMat r;
GaussianBlur(m,r,Size(5,5),0);
这生成了所需的缓存文件夹,我现在可以运行OpenCL版本的AKAZE了。为了让提到这一点的人明白,自OpenCV 4.0.0-dev起,AKAZE的OpenCL版本尚未完全实现。只有部分算法在OpenCL上运行,因此性能与原始OpenCV AKAZE大致相同,检测仍在单线程上运行


有一个cuda verion可用。还有一个高度多线程的版本,可以在8个线程上以60 fps的速度运行。这两个版本都是为
OpenCV 3.0.0
而构建的,应该可以与较新的版本配合使用,只需稍作改动。

我不确定OpenCV是否支持OpenCL对AKAZE的支持,他们确实支持使用CUDA,但这可能在4.0中有所改变。你试过使用ORB还是FAST吗?@RickM。您能否确认akaze是否仍有cuda支持?或者cuda akaze提供的opencv的最新版本是什么?我还没有试过ORB和FAST,我在CPU上的这两个没有达到预期的效果。试着通读一下CPU上的这两个没有达到预期的效果是什么意思?你期望的结果是什么?速度?@RickM。速度和准确性。有了AKAZE,我得到了100+场比赛,而有了ORB,我几乎没有得到5+场比赛,而FAST也差不多和ORB一样。既然akaze有这么好,我想要一个更快的版本。在核心i9上进行检测和匹配大约需要70毫秒。我想把它降得尽可能低。