我在Win 8.1 64位计算机上使用带有VS2012 C ++ / CLI的OpenCV 3.0。
我想知道创建一个指向Gpumat的C ++指针的正确方法是什么。
目前,我定义了一些指针,例如:
cuda::GpuMat *d_gpuLoadFrame;
cuda::GpuMat *d_gpuLoadFrameClone;
cuda::GpuMat *d_gpuAnalysisFrame;
cuda::GpuMat *d_gpuGrayFrame;
cuda::GpuMat *d_gpuMaskFrame;
cuda::GpuMat *d_gpuFalseMaskFrame;
然后我自己分配指针,如:
d_gpuLoadFrame = new cuda::GpuMat();
d_gpuLoadFrameClone = new cuda::GpuMat();
d_gpuAnalysisFrame = new cuda::GpuMat();
d_gpuGrayFrame = new cuda::GpuMat();
d_gpuMaskFrame = new cuda::GpuMat();
d_gpuFalseMaskFrame = new cuda::GpuMat();
d_gputFrame = new cuda::GpuMat();
我看到一些奇怪的行为让我觉得这可能是错的。例如,我将标准Mat上传到其中一些并以各种方式克隆它们,看起来C ++指针正在丢失。
我是否需要做一些不同的事情来跟踪Gpumats,以便在我从一个函数移动到另一个函数时它们不被破坏?
答案 0 :(得分:1)
无需以您显示的方式提供指针。只需在调用函数的实际参数中写入名称,就可以将GpuMat文件传递给函数。在功能方面,可以使用如下所示的参考访问它:
GpuMat abc;
foo(abc);
//at the function definition
void foo(GpuMat& abc) { ... }