2013-10-14 17 views
6

Sto utilizzando OpenCV ramo principale (3.0.0 dev.) Con CUDA su Ubuntu 12.04, e cercando di compilare il seguente OpenCV con il codice di gpu:Compilazione errore 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; 
} 

Il comando compilazione è:

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

ha le seguenti errori compilando:

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; 
         ^

E 'qualcosa che non va con l'installazione di OPENÇ V, o l'API cambia in Opencv 3.0.0?

+0

possibile duplicati di [errore gpumat e tappetino] (http://stackoverflow.com/questions/14468191/error-with-gpumat-and-mat) – talonmies

risposta

19

Il modulo gpu è stato ridisegnato in OpenCV 3.0. È stato suddiviso in più moduli, è stato rinominato in cuda e gpu:: lo spazio dei nomi è stato rinominato in cuda::. Il codice corretto per 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; 
} 
6

Ah, hanno giocato con le costanti in master. Aspettatevi il prefisso CV_* rimosso quasi ovunque (eccetto i tipi, CV_8U e tali sono ancora vivi).

Quindi è cv::THRESH_BINARY, cv::LOAD_IMAGE_GRAYSCALE, ma .... cv::COLOR_BGR2GRAY (non è stato utilizzato subito, ma vi risparmio la ricerca;))

dispiace, non ho esperienza con roba GPU quindi non posso risolvere l'ultimo indovinello lì.

+0

grazie, lavorato per me - dove sono definiti questi? –

+1

principalmente nella parte superiore del resp. intestazioni del modulo – berak