1

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);

誰かが異常の考えられる理由を指摘できますか?

ありがとう、

シド

4

0 に答える 0