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 を使用しようとしましたが、それでも機能しませんでした。
すべての助けに感謝します。前もって感謝します。