2013-01-22 6 views
5

Kiedy skompilować ten przykład:błąd z gpumat i maty

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

mam następujący błąd:

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

Czy ktoś wie dlaczego?

Odpowiedz

3

W aktualnych wersjach OpenCV klasa cv::Mat nie ma przeciążonego operatora przypisania lub konstruktora kopiowania, który przyjmuje argument typu cv::gpu::GpuMat. Tak więc poniższa linia twojego kodu nie będzie się kompilować.

cv::Mat result_host = dst; 

Istnieją 2 alternatywy do tego.

Najpierw można przekazać dst jako argument konstruktora result_host.

cv::Mat result_host(dst); 

Po drugie jest to, że można wywołać funkcję download z dst

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

dzięki za twoją odpowiedź. Teraz podczas wykonywania tego pliku następujący błąd: /// OpenCV Błąd: Kod Nieznany błąd -216 (Biblioteka jest skompilowany bez obsługi CUDA) w formie kopii, plik /home/cbib/Descargas/OpenCV-2.4. 3/modules/core/src/gpumat.cpp, linia 736 ///// wiesz co może być spowodowane? –

+0

@CitoBebster ... Dzieje się tak, ponieważ używasz plików binarnych OpenCV skompilowanych bez obsługi CUDA. Sprawdź [tę odpowiedź] (http://stackoverflow.com/questions/13228762/opencv-2-4-3rc-and-cuda-4-2-opencv-error-no-gpu-support/13231205#13231205), w którym ta sama kwestia została rozwiązana. – sgarizvi

2

Wydaje się, że należy użyć download metodę gpuMat aby przekształcić go cv::Mat:

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

Zobacz this doc.

+1

@ChitoWebster moja odpowiedź została faktycznie również prawidłowe (można spróbować go +1). O Twoim nowym błędzie przeczytaj tutaj: http://stackoverflow.com/questions/12910902/opencv-error-no-gpu-support-library-is-compiled-without-cuda-support – ArtemStorozhuk

Powiązane problemy