CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?



我正在查看OpenCV的goodFeaturesToTrack实现(版本3.4.5,file modules/imgproc/src/featureselect.cpp(,并在其中找到了CV_OCL_RUN宏。我对OpencCL一无所知,但我了解C语言中通常使用的预处理器机制。我不明白这应该如何工作:

void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
int maxCorners, double qualityLevel, double minDistance,
InputArray _mask, int blockSize, int gradientSize,
bool useHarrisDetector, double harrisK )
{
CV_INSTRUMENT_REGION();
CV_Assert( qualityLevel > 0 && minDistance >= 0 && maxCorners >= 0 );
CV_Assert( _mask.empty() || (_mask.type() == CV_8UC1 && _mask.sameSize(_image)) );
CV_OCL_RUN(_image.dims() <= 2 && _image.isUMat(),
ocl_goodFeaturesToTrack(_image, _corners, maxCorners, qualityLevel, minDistance,
_mask, blockSize, gradientSize, useHarrisDetector, harrisK))
Mat image = _image.getMat(), eig, tmp;
if (image.empty())
{
_corners.release();
return;
}
.
.
.

假设这是使用 OpenCL 支持编译的,因此在宏CV_OCL_RUN所在的地方,可以有效地调用函数ocl_goodFeaturesToTrack。在那之后,执行不会继续执行适用于没有 OpenCL 的版本的代码行吗?我可以想到在更高级别定义的其他宏,如果您支持 OpenCL,那么我正在查看的函数将不会被调用,但我没有找到任何其他定义它的部分。

如果我没有误解这种情况,该函数将不会继续执行 - 宏包含一个 return 语句。

看看CV_OCL_RUN可以扩展到什么的可能选项: https://github.com/opencv/opencv/blob/master/modules/core/include/opencv2/core/opencl/ocl_defs.hpp

如果采用 OpenCL 路由,则CV_OCL_RUN_的所有三种变体都将返回:第 36、57 和 67 行。

相关内容

  • 没有找到相关文章

最新更新