2015-12-10 34 views
1

基於openCV 3.0和openCL的變化,我似乎無法使用openCL來獲得pyrMeanShiftFiltering的工作。我知道在openCV 2.4.10中支持ocl :: meanShiftFiltering。下面的兩個函數需要花費相同的時間來執行。openCV 3.0,openCL和meanShiftFiltering

我怎麼才能檢查openCV 3.0中哪些函數在openCL下受支持?有什麼建議麼?

#include <opencv2/core/ocl.hpp> //attempting to use openCL 
using namespace cv; 
using namespace ocl; 
    void meanShiftOCL() 
    { 
     setUseOpenCL(true) 
     UMat in, out; 
     imread("./images/img.png").copyTo(in); 
     pyrMeanShiftFiltering(in, out, 40, 20, 3);  
    } 


    //not using openCL 
    void meanShift() 
    { 
    Mat in, out; 
    imread("./images/img.png").copyTo(in); 
    pyrMeanShiftFiltering(in, out, 40, 20, 3);   
    } 

回答

1

我不知道,有簡單的方法給定OpenCV的二進制文件,以確定它,但你可以自己重新編譯OpenCV的額外的定義(可在cmake的指定):

CV_OPENCL_RUN_VERBOSE

有了這個定義每一個函數爲其OpenCL的實現可將打印到控制檯(標準輸出)以下消息:

<function name>: OpenCL implementation is running

視爲你的問題 - 目前pyrMeanShiftFiltering沒有OpenCL的實現,因爲我知道。

+0

感謝您的回覆。 pyrMeanShiftFiltering沒有openCL實現,這真是一件壞事。在版本2.4.10中,可以使用ocl :: meanShiftFiltering。他們爲什麼拿走它的任何理由? \ n 3.0文檔中是否有任何方法可以判斷某個函數是否啓用了openCL? –

+0

我不知道爲什麼發生了 - 可能你可以[創建一個功能請求](https://github.com/Itseez/opencv/issues)甚至添加實現,並提出拉請求。關於文檔 - 我沒有發現任何可能性來確定OpenCL實現是否可用... – avtomaton

+0

正如我所見,** cuda **版本的pyrMeanShiftFiltering存在。還有** OpenCL ** - 收取'pyrUp'和'pyrDown'。 – avtomaton