将 GPU 数据从 python (pycuda gpuarray) 交换到 opencv (cv::cuda::GpuMat),反之亦然

Wiz*_*ard 5 python opencv pycuda

我有一个 pycuda gpuarray,我想将其提供给 opencv cuda 函数。据我了解,目前 opencv 3 cv::cuda 模块没有 python 绑定。所以我尝试编写自己的 python 包装器来访问 cv::cuda 函数(在我的例子中是 cv::cuda::HOG 类)。

不幸的是,当涉及到数据交换的核心部分时,我遇到了障碍。我知道你可以使用类似的结构

static PyObject* my_function(PyObject* self, PyObject* args)
{
  int test;
  PyArg_ParseTuple(args, "t", &test);
}
Run Code Online (Sandbox Code Playgroud)

传递基本数据类型,但我不知道如何使用 GPU 内存上的指针来实现这一点(在我的例子中gpuarray.gpudata)。我的理解是gpuarray.gpudata根据gpu 上的但dtype产生一个指针。gpuarray

所以在 python 方面,事情看起来像这样:

input_gpu = gpuarray.zeros(shape=(3,3), dtype=numpy.float32)
output_gpu = gpuarray.zeros(shape=(3,3), dtype=numpy.float32)
my_function(input.gpudata, output.gpudata)
Run Code Online (Sandbox Code Playgroud)

在 C++ 方面,我必须使用cv:cuda::GpuMat,那么如何从gpuarray.gpudatacv:cuda::GpuMat,反之亦然?