2013-01-22 4 views
5

Als ich dieses Beispiel kompilieren:Fehler mit gpumat und Matte

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

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

ich folgende Fehlermeldung bekam:

threshold.cpp: In function ‘int main(int, char**)’: 
threshold.cpp:19: error: conversion from ‘cv::gpu::GpuMat’ to non-scalar type ‘cv::Mat’ requested 

niemand weiß, warum?

Antwort

3

In den aktuellen Versionen von OpenCV hat die Klasse cv::Mat keinen überladenen Zuweisungsoperator oder Kopierkonstruktor, der das Argument cv::gpu::GpuMat übernimmt. Daher wird die folgende Zeile Ihres Codes nicht kompiliert.

cv::Mat result_host = dst; 

Es gibt 2 Alternativen.

Zuerst können Sie die dst als Argument des Konstruktors result_host übergeben.

cv::Mat result_host(dst); 

Zweite ist, dass Sie die download Funktion von dst

cv::Mat result_host; 
dst.download(result_host); 
+0

danke für Ihre Antwort. nun bei der Ausführung dieser Datei die folgende Fehlermeldung: /// OpenCV Fehler: Unbekannter Fehlercode -216 (Die Bibliothek ohne CUDA-Unterstützung kompiliert wird) in Kopie, Datei /home/cbib/Descargas/OpenCV-2.4. 3/modules/core/src/gpumat.cpp, Zeile 736 ///// Sie wissen, was verursacht werden kann? –

+0

@ChitoWebster ... Dies liegt daran, dass Sie die OpenCV-Binärdateien verwenden, die ohne CUDA-Unterstützung kompiliert wurden. Überprüfen Sie [diese Antwort] (http://stackoverflow.com/questions/13228762/opencv-2-4-3rc-and-cuda-4-2-opencv-error-no-gpu-support/13231205#13231205) in welcher Das gleiche Problem wurde behoben. – sgarizvi

2

Es scheint, dass Sie download Methode von gpuMat verwenden sollte es cv::Mat zu konvertieren:

//! downloads data from device to host memory. Blocking calls. 
     void download(cv::Mat& m) const; 

this doc See.

+1

nennen kann @ChitoWebster meine Antwort eigentlich auch richtig war (man kann es auf +1 versuchen). Über Ihren neuen Fehler lesen Sie hier: http://stackoverflow.com/questions/12910902/opencv-error-no-gpu-support-library-is-compiled-without-cuda-support – ArtemStorozhuk

Verwandte Themen