3

OpenCV の直接変換機能を使用せずに、Bayer パターンを RGB 画像にデモザイクする作業を行っています。バイリニア補間を使用して動作させましたが、フリーマン法を使用して品質を改善したいと考えています。この方法にはメディアン フィルターが必要です。OpenCV には、それを行う medianBlur 関数があります。しかし、私はこの機能を使用するのに問題があります。medianBlur を適用する cv::Mat が CV_8UC1 型の場合は機能しますが、CV_32S 型の場合は機能しません。これは機能しません:

    redGreenMedian.create(input.size(), CV_32S);
    blueGreenMedian.create(input.size(), CV_32S);
    blueMinusGreen.create(input.size(), CV_32S);
    redMinusGreen.create(input.size(), CV_32S);
    for(int i = 1; i <= 3; i += 2)
    {
            cv::medianBlur(redMinusGreen, redGreenMedian, i);
            cv::medianBlur(blueMinusGreen, blueGreenMedian, i);
    }

すべての CV_32S を CV_8UC1 に変更すると、機能します。デバッグ時に、最初の繰り返しではなく、2 回目の繰り返しでクラッシュすることがわかりました。ただし、両方の反復で実行する必要があります。これも別々に書いた場合には機能しません:

    cv::medianBlur(redMinusGreen, redGreenMedian, 3);

余談ですが、CV_32S を使用する必要はありませんが、行列に負の数を格納する機能が必要です。
: マトリックス内のすべての数値を正にしてから medianBlur を使用しようとしましたが、それでも機能しませんでした。
すべての助けに感謝します。前もって感謝します。

4

1 に答える 1