1

我正在使用 OpenCV 的 gpu 库(版本 2.4.3)进行一些具有不同内核大小的 2D 卷积。

如果我使用 gpu::filter2D 函数,卷积工作正常。但是,如果我将内核大小从 7x7 增加到 17x17,那么 gpu::filter2D 就会出错。我猜 gpu::convolve 支持具有更大内核大小的卷积,但我遇到了一些麻烦。

根据文档,对于 gpu::convolve,我使用内核的 GpuMat 版本,而对于 gpu:filter2D,我使用内核的 Mat 版本。我将图像和内核设置为 CV_32FC1 数据类型。

下面是我的代码片段:

struct GPU_Buffer {
    GpuMat InputImage_GPU;
    GpuMat BasisPatch_GPU;
    GpuMat OutputImage_GPU;
} gpuBuffer;

Mat ConvOutputImage = Mat::zeros(InputImage.rows, InputImage.cols, CV_32FC1);

gpuBuffer.InputImage_GPU.upload(InputImage);
gpuBuffer.BasisPatch_GPU.upload(basisPatch);

Point anchor(-1,-1);  // Anchor is at Filter center

int borderMode = BORDER_CONSTANT;

// Works for 7x7
gpu::filter2D(gpuBuffer.InputImage_GPU, gpuBuffer.OutputImage_GPU, -1, basisPatch, anchor, borderMode);

// Doesn't work for any size at all
//gpu::convolve(gpuBuffer.InputImage_GPU, gpuBuffer.BasisPatch_GPU, gpuBuffer.OutputImage_GPU, true);   // true => performs correlation

gpuBuffer.OutputImage_GPU.download(ConvOutputImage);

有人可以指出异常的可能原因吗?

谢谢,

席德

4

0 回答 0