簡體   English   中英

CV_OCL_RUN 宏如何在 OpenCV(3.4.5 版)的 goodFeaturesToTrack 實現中工作?

[英]How does CV_OCL_RUN macro work in goodFeaturesToTrack implementation from OpenCV (version 3.4.5)?

我正在查看 OpenCV(版本 3.4.5,文件 modules/imgproc/src/featureselect.cpp)中的 goodFeaturesToTrack 實現,並在其中找到了 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 行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM