如何从opencv gpumat

时间:2018-10-14 06:07:08

标签: compiler-errors cuda opencv3.0 thrust

我需要将opencv :: gpumat转换为推力::设备矢量,然后执行推力:: copy_if,然后将生成的推力::设备矢量再次复制到cv :: gpumat。

如何从cv :: gpumat转换为推力::: device_vector,反之亦然?

我的代码(如下)给出了编译错误: 错误:预期为类型说明符

gcc(Ubuntu 5.4.0-6ubuntu1〜16.04.10)5.4.0 20160609

nvcc:Cuda编译工具,版本8.0,V8.0.44

推力v1.8

ubuntu 16.04

我的代码:

#include <thrust/random.h>

#include <thrust/device_ptr.h>
#include <thrust/device_vector.h>

#include <opencv2/core/cuda.hpp>

int main(void)
{
    cv::Mat input_host(1,100,CV_32F);
    cv::Mat output_host(1,100,CV_32F);

    cv::randu(input_host, cv::Scalar(-10), cv::Scalar(10));
    cv::cuda::GpuMat input_device(1, 100, CV_32F);
    input_device.upload(input_host);

    thrust::device_ptr<CV_32F> input_ptr(input_device.ptr());

    thrust::device_vector<CV_32F>   input_device_vector  (input_ptr,100);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

  

如何从cv :: gpumat转换为推力:: device_vector ....

无法完成。推力未提供从现有指针构造device_vector的机制。复制构造是可以从现有数据实例化device_vector的唯一方法。

  

....反之亦然?

这可以做到:

  1. device_vector投射为原始指针(请参见here
  2. 从原始指针创建一个openCV gpumat实例(请参见here

请注意,如果让device_vector超出范围,则将调用其析构函数,并且将释放支持它的内存(以及使用同一内存的其他任何对象),并且您处于未定义的行为中领土。