OpenCVライブラリでcv :: cuda :: createMedianfilter関数を使用しようとしています。OpenCv 3.3 Cuda Medianfilterは画像の黒の2/3を生成します
この単純なコードは、2/3の黒で、1/3のみがフィルタリングされた画像を生成します。
using namespace cv;
int main(int argc, char** argv)
{
Mat src; Mat dst;
src = imread("test.bmp", 1);
cuda::GpuMat imageGpu(src),imageGpuOut;
cuda::Stream stream;
try
{
Ptr<cuda::Filter> filterX = cuda::createMedianFilter(CV_8UC1, 31);
filterX->apply(imageGpu, imageGpuOut,stream);
imageGpuOut.download(dst,stream);
stream.waitForCompletion();
imwrite("test_cuda31.bmp", dst);
}
catch (cv::Exception& e)
{
const char* err_msg = e.what();
std::cout << "exception caught: " << err_msg << std::endl;
}
}
入力画像は、次のようになりますInput image
出力画像は、次のようになります。私は、さまざまなサイズともmedianfilter上の異なるカーネルサイズの他のいくつかの画像を試してみましたOutput image
。すべて同じ結果です。
私が間違っていることに関するアイデアはありますか?あなたはその後、3つのチャネル(BGR)
src = imread("test.bmp", 1);
の画像をロードする
私はそれはあなたがRGBとして画像を読み取るためだと思う - >それは3つのチャンネルで、メディアンフィルタ機能を作成するには、あなたがCV_8UC1を使う - >それは1つのチャンネルです....したがって、画像の1/3を処理します。まずグレースケールに変換するか、0で1をロードしてください。間違っているかもしれません.OpenCVのCUDAモジュールをあまり使用していません。 – api55
@ api55 ..それが問題の正しい理由です。問題が解決済みとしてマークされるように、あなたのコメントを回答として追加してください。 – sgarizvi