2013-09-06 2 views
0

Я бегу Ubuntu 12.04, OpenCV 2.4.6.0.1 и Cuda 5.5 я получил следующий код:Ошибка компиляции, когда я называю метод матч из BruteForceMatcher_GPU

BruteForceMatcher_GPU<Hamming> matcher; 
ORB_GPU orb(1000); 
GpuMat patternImage_descriptors; 
orb(patternImage_g, GpuMat(), patternImage_keypoints, patternImage_descriptors); 

// where patternImage_g is an image I'm loading with GpuMat patternImage_g(originalImage) 
// after I make it Gray and resizeing it to 640x480 

// then I call 
vector<GpuMat> descriptors(1); 
descriptors[0] = patternImage_descriptors; 
matcher.add(descriptors); 
// to train the matcher and then 

vector< vector<DMatch> > matches; 
matcher.match(frame_descriptors, matches); 

// Where frame_descriptors were extracted via ORB_GPU 

, а затем я получаю эту ошибку компиляции : команда

MatchingEngineGPU.cpp: In member function 'void 
MatchingEngineGPU::processFrameFromFile(const Frame&, Frame&)': 
MatchingEngineGPU.cpp:28:43: error: no matching function for call to 
'cv::gpu::BruteForceMatcher_GPU<cv::Hamming>::match(cv::gpu::GpuMat&, 
std::vector<std::vector<cv::DMatch> >&)' 
MatchingEngineGPU.cpp:28:43: note: candidates are: 
/usr/local/include/opencv2/gpu/gpu.hpp:1388:10: note: void 
cv::gpu::BruteForceMatcher_GPU_base::match(const cv::gpu::GpuMat&, const 
cv::gpu::GpuMat&, std::vector<cv::DMatch>&, const cv::gpu::GpuMat&) 
/usr/local/include/opencv2/gpu/gpu.hpp:1388:10: note: candidate expects 4 
arguments, 2 provided 
/usr/local/include/opencv2/gpu/gpu.hpp:1404:10: note: void 
cv::gpu::BruteForceMatcher_GPU_base::match(const cv::gpu::GpuMat&, 
std::vector<cv::DMatch>&, const std::vector<cv::gpu::GpuMat>&) 
/usr/local/include/opencv2/gpu/gpu.hpp:1404:10: note: no known conversion 
for argument 2 from 'std::vector<std::vector<cv::DMatch> >' to 
'std::vector<cv::DMatch>&' 

Компиляция:

g++ *.hpp *.cpp `pkg-config --cflags --libs opencv` 

И я проверил документ тация для BruteForceMatcher_GPU и имеют следующие функции:

void match(const GpuMat& query, std::vector<DMatch>& matches, 
    const std::vector<GpuMat>& masks = std::vector<GpuMat>()); 

Это может быть просто ++ логическая ошибкой C, но для жизни меня я не могу понять это, пожалуйста, помогите мне.

+1

Пожалуйста, всегда оставляйте самостоятельный фрагмент для ошибок компиляции, включая основную функцию и команду компиляции. – lpapp

ответ

2

В сообщении об ошибке и состояние документации, match принимает ссылку на std::vector<DMatch>, неstd::vector<std::vector<DMatch>>, который является то, что вы передаете.

+0

Вот оно, спасибо! –

Смежные вопросы