gpumat 和 mat 错误
Posted
技术标签:
【中文标题】gpumat 和 mat 错误【英文标题】:error with gpumat and mat 【发布时间】:2013-01-22 21:18:43 【问题描述】:当我编译这个例子时:
#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;
我收到以下错误:
threshold.cpp: In function ‘int main(int, char**)’:
threshold.cpp:19: error: conversion from ‘cv::gpu::GpuMat’ to non-scalar type ‘cv::Mat’ requested
有人知道为什么吗?
【问题讨论】:
【参考方案1】:在当前版本的 OpenCV 中,cv::Mat
类没有重载赋值运算符或接受 cv::gpu::GpuMat
类型参数的复制构造函数。因此,您的以下代码行将无法编译。
cv::Mat result_host = dst;
有 2 种替代方法。
首先您可以将dst
作为result_host
的构造函数的参数传递。
cv::Mat result_host(dst);
二是可以调用dst
的download
函数
cv::Mat result_host;
dst.download(result_host);
【讨论】:
感谢您的回复。现在执行此文件时出现以下错误:/// OpenCV 错误:未知错误代码 -216(库在没有 CUDA 支持的情况下编译)在副本中,文件 /home/cbib/Descargas/OpenCV-2.4.3/modules/core/ src/gpumat.cpp, line 736 ///// 你知道可能是什么原因吗? @ChitoWebster... 这是因为您使用的是在没有 CUDA 支持的情况下编译的 OpenCV 二进制文件。检查this answer,其中相同的问题已得到解决。【参考方案2】:看来你应该使用gpuMat
的download
方法将其转换为cv::Mat
:
//! downloads data from device to host memory. Blocking calls.
void download(cv::Mat& m) const;
见this doc。
【讨论】:
@ChitoWebster 我的回答实际上也是正确的(您可以尝试 +1)。关于您在此处阅读的新错误:***.com/questions/12910902/…以上是关于gpumat 和 mat 错误的主要内容,如果未能解决你的问题,请参考以下文章
将 cv::cuda::GpuMat 与推力和测试推力 API 一起使用时出现问题
未捕获的错误:模板解析错误:'mat-label' 不是已知元素: