5

この例をコンパイルすると:

#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

誰も理由を知っていますか?

4

2 に答える 2

4

現在のバージョンの OpenCV では、このcv::Matクラスには型の引数を取るオーバーロードされた代入演算子またはコピー コンストラクターがありませんcv::gpu::GpuMat。したがって、コードの次の行はコンパイルされません。

cv::Mat result_host = dst;

これには 2 つの代替手段があります。

dst最初に、 のコンストラクターの引数としてを渡すことができますresult_host

cv::Mat result_host(dst);

download2 つ目は、次の関数を呼び出すことができることです。dst

cv::Mat result_host;
dst.download(result_host);
于 2013-01-22T23:15:34.803 に答える
2

downloadのメソッドを使用して次のgpuMatように変換する必要があるようcv::Matです。

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

このドキュメントを参照してください。

于 2013-01-22T23:13:46.527 に答える