【问题标题】:error with gpumat and matgpumat 和 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

有人知道为什么吗?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    在当前版本的 OpenCV 中,cv::Mat 类没有重载赋值运算符或接受 cv::gpu::GpuMat 类型参数的复制构造函数。因此,您的以下代码行将无法编译。

    cv::Mat result_host = dst;
    

    有 2 种替代方法。

    首先您可以将dst 作为result_host 的构造函数的参数传递。

    cv::Mat result_host(dst);
    

    二是可以调用dstdownload函数

    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】:

    看来你应该使用gpuMatdownload方法将其转换为cv::Mat

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

    this doc

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多