2013-10-14 13 views
6

私はUbuntuの12.04でCUDAとOpenCVのマスターブランチ(3.0.0 DEVを。)を使用して、およびGPUのコードでは、次のOpenCVのコンパイルしようとしています:コンパイルエラーCV :: GPU

#include <iostream> 
#include "opencv2/opencv.hpp" 
#include "opencv2/core.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/gpu/gpu.hpp" 

using namespace cv; 

int main (int argc, char* argv[]) 
{ 
    try 
    { 
     cv::Mat src_host = cv::imread("file.png", CV_LOAD_IMAGE_GRAYSCALE); 
     cv::gpu::GpuMat dst, src; 
     src.upload(src_host); 

     cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY); 

     cv::Mat result_host = dst; 
     cv::imshow("Result", result_host); 
     cv::waitKey(); 
    } 
    catch(const cv::Exception& ex) 
    { 
     std::cout << "Error: " << ex.what() << std::endl; 
    } 
    return 0; 
} 

コンパイルコマンドを次のとおりです。

g++ testgpu.cpp -o test `pkg-config --cflags --libs opencv` -lopencv_gpu 

それは、次のコンパイルエラーがあります。

testgpu.cpp: In function ‘int main(int, char**)’: 
testgpu.cpp:13:51: error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope 
     cv::Mat src_host = cv::imread("file.png", CV_LOAD_IMAGE_GRAYSCALE); 
               ^
testgpu.cpp:17:52: error: ‘CV_THRESH_BINARY’ was not declared in this scope 
     cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY); 
                ^
testgpu.cpp:19:31: error: conversion from ‘cv::gpu::GpuMat’ to non-scalar type ‘cv::Mat’ requested 
     cv::Mat result_host = dst; 
         ^

それはOPENCのインストールで何かが間違っていますV、またはOpencv 3.0.0でAPIが変更されましたか?

+0

可能重複(http://stackoverflow.com/questions/14468191/error-with-gpumat-and-mat) – talonmies

答えて

19

gpuモジュールがOpenCV 3.0で再設計されました。いくつかのモジュールに分割され、cudaに名前が変更され、gpu::名前空間がcuda::に変更されました。 OpenCVの3.0の正しいコード:

#include <iostream> 
#include "opencv2/opencv.hpp" 
#include "opencv2/core.hpp" 
#include "opencv2/highgui.hpp" 
#include "opencv2/cudaarithm.hpp" 

using namespace cv; 

int main (int argc, char* argv[]) 
{ 
    try 
    { 
     cv::Mat src_host = cv::imread("file.png", cv::IMREAD_GRAYSCALE); 
     cv::cuda::GpuMat dst, src; 
     src.upload(src_host); 
     cv::cuda::threshold(src, dst, 128.0, 255.0, cv::THRESH_BINARY); 
     cv::Mat result_host(dst); 
     cv::imshow("Result", result_host); 
     cv::waitKey(); 
    } 
    catch(const cv::Exception& ex) 
    { 
     std::cout << "Error: " << ex.what() << std::endl; 
    } 
    return 0; 
} 
[gpumatとマットとの誤差]の
6

ああ、彼らはマスターの定数で遊んできました。接頭辞CV_*の接頭辞は、とほぼ同じです(CV_8Uなどはまだ生きていますが)のどこにでもあります。

だからcv::THRESH_BINARYcv::LOAD_IMAGE_GRAYSCALEだが.... cv::COLOR_BGR2GRAY(あなたは今、それを使用していませんでしたが、私はあなたに検索を惜しまよ;)申し訳ありませんが、私はGPUのものとまったく経験をしたん)

私は最後の謎を解くことができません。

+0

おかげで、働い私のために - これらはどこに定義されていますか? –

+1

はほとんどがrespの最上位にあります。モジュールヘッダー – berak