OpenCV - gpu :: convolve的问题

时间:2013-02-13 03:33:13

标签: opencv gpu

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

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

根据文档,对于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);

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

谢谢,

西特

0 个答案:

没有答案