我正在使用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);
有人能指出我可能出现异常的原因吗?
谢谢,
西特