如何从 opencv gpumat 创建推力 device_vector
How to create thrust device_vector from opencv gpumat
我需要将 opencv::gpumat 转换为 thrust::device_vector,然后执行 thrust::copy_if,然后再次将结果 thrust::device_vector 复制到 cv::gpumat。
如何将 cv::gpumat 转换为 thrust::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;
}
How to convert from cv::gpumat to thrust::device_vector ....
这是不可能的。 Thrust 没有公开从现有指针构造 device_vector
的机制。复制构造是 device_vector
可以从现有数据实例化的唯一方法。
.... & vice-versa?
这可以做到:
- 将
device_vector
转换为原始指针(参见 here)
- 从原始指针创建一个 openCV gpumat 实例(参见 here)
请注意,如果您让 device_vector
超出范围,它的析构函数将被调用,支持它的内存(以及使用相同内存的任何其他东西)将被释放,您将进入未定义的行为领域。
我需要将 opencv::gpumat 转换为 thrust::device_vector,然后执行 thrust::copy_if,然后再次将结果 thrust::device_vector 复制到 cv::gpumat。
如何将 cv::gpumat 转换为 thrust::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;
}
How to convert from cv::gpumat to thrust::device_vector ....
这是不可能的。 Thrust 没有公开从现有指针构造 device_vector
的机制。复制构造是 device_vector
可以从现有数据实例化的唯一方法。
.... & vice-versa?
这可以做到:
- 将
device_vector
转换为原始指针(参见 here) - 从原始指针创建一个 openCV gpumat 实例(参见 here)
请注意,如果您让 device_vector
超出范围,它的析构函数将被调用,支持它的内存(以及使用相同内存的任何其他东西)将被释放,您将进入未定义的行为领域。