2013-01-22 21 views
5

Khi tôi biên dịch ví dụ này:lỗi với gpumat và mat

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

tôi bị lỗi sau:

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

Có ai biết tại sao?

Trả lời

3

Trong các phiên bản hiện tại của OpenCV, lớp cv::Mat không có toán tử gán quá tải hoặc sao chép hàm tạo đối số kiểu cv::gpu::GpuMat. Vì vậy, dòng mã sau của bạn sẽ không biên dịch.

cv::Mat result_host = dst; 

Có 2 lựa chọn thay thế cho điều này.

Trước tiên, bạn có thể chuyển số dst làm đối số của hàm tạo của result_host.

cv::Mat result_host(dst); 

Thứ hai là bạn có thể gọi download chức năng của dst

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

cảm ơn phản hồi của bạn. Bây giờ khi thực hiện tập tin này được lỗi sau: /// OpenCV Lỗi: Mã Lỗi không xác định -216 (Thư viện này được biên soạn mà không cần hỗ trợ CUDA) trong sao chép, file /home/cbib/Descargas/OpenCV-2.4. 3/modules/core/src/gpumat.cpp, dòng 736 ///// bạn biết điều gì có thể gây ra không? –

+0

@ChitoWebster ... Điều này là do bạn đang sử dụng các tệp nhị phân OpenCV được biên dịch không hỗ trợ CUDA. Kiểm tra [câu trả lời này] (http://stackoverflow.com/questions/13228762/opencv-2-4-3rc-and-cuda-4-2-opencv-error-no-gpu-support/13231205#13231205) trong đó cùng một vấn đề đã được giải quyết. – sgarizvi

2

Dường như bạn nên sử dụng phương pháp downloadgpuMat để chuyển nó sang cv::Mat:

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

Xem this doc.

+1

@ChitoWebster câu trả lời của tôi đã thực sự cũng đúng (bạn có thể thử 1 nó). Giới thiệu về lỗi mới của bạn, hãy đọc tại đây: http://stackoverflow.com/questions/12910902/opencv-error-no-gpu-support-library-is-compiled-without-cuda-support – ArtemStorozhuk

Các vấn đề liên quan