2016-03-13 105 views
0

我正在嘗試使用Opencv CUDA模塊,特別是指cv :: cuda :: log函數。如何使用opencv cuda模塊日誌功能

首先,我將詳細介紹Opencv編譯。 我使用WITH_CUDA標記編譯Opencv,從編譯中取出libs和dll,但是我從下載的opencv文件夾複製了頭文件,因爲編譯文件夾默認不包含頭文件。

我想知道這是否是正確的做法?

其次,我嘗試使用cv :: cuda :: function。

我包括cuda.hpp頭

#include "opencv2/core/cuda.hpp" 

cv::cuda::GpuMat source, dest; 

GpuMat編譯非常適合我,但是我不知道我應該包括爲了與日誌功能工作的文件。當我寫了下面這行

cv::cuda::log(source, dest); 

我一直收到錯誤消息:

error: C2039: log in not a member of cv::cuda 

的Windows 7時,Visual Studio 2013,opencv的3.0.0,平臺:64位CUDA工具包6.5

三,我想了解一下Opencv CUDA的實現,它是否利用npp的功能? Opencv vs npp,哪一個更好用?

我可以很容易地使用npp編寫我的代碼,但是我想知道opencv CUDA模塊。

感謝

+0

https://github.com/Itseez/opencv/blob/ddf82d0b154873510802ef75c53e628cd7b2cb13/modules/cudaarithm/include/opencv2/cudaarithm。 hpp#L190 – talonmies

+0

謝謝你,我的編譯沒有那個文件,你從哪裏得到它的? – TripleS

+0

我去了github網站上的文檔並查找它 – talonmies

回答

0

後搜索的幾天,我想分享我的知識

我做錯了一件事,就是從Opencv編譯頭文件中,正確的做法是從所有Opencv模塊(單獨的每個模塊)中取出頭文件。

二,Opencv編譯CUDA標誌後,一切工作很好。

第三,一些OpenCV的CUDA功能確實利用NPP

第四,使用github上

0

此代碼應該OpenCV的3.1工作:

#include <opencv2/opencv.hpp> 
#include <opencv2/cudaarithm.hpp> 

int main() 
{ 
    cv::Mat img = cv::imread("img.jpg", cv::IMREAD_GRAYSCALE); 
    cv::Mat img_32f; 
    img.convertTo(img_32f, CV_32F); 
    //To avoid log(0) that is undefined 
    img_32f += 1.0f; 

    cv::cuda::GpuMat gpuImg, gpuImgLog; 
    gpuImg.upload(img_32f); 
    cv::cuda::log(gpuImg, gpuImgLog); 

    cv::Mat imgLog, imgLog_32f; 
    gpuImgLog.download(imgLog_32f); 

    double min, max; 
    cv::minMaxLoc(imgLog_32f, &min, &max); 
    imgLog_32f.convertTo(imgLog, CV_8U, 255.0/(max-min), -255.0*min/(max-min)); 

    cv::imshow("img", img); 
    cv::imshow("imgLog", imgLog); 
    cv::waitKey(0); 

    return 0; 
} 
相關問題