OpenCV (バージョン 2.4.3) の gpu ライブラリを使用して、異なるカーネル サイズでいくつかの 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);
誰かが異常の考えられる理由を指摘できますか?
ありがとう、
シド