我正在不使用 OpenCV 的直接转换功能将拜耳模式去马赛克到 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,那么它可以工作。在调试时,我发现它在第二次迭代中崩溃,而不是在第一次迭代中。但是,我需要它在两次迭代中都运行。这在单独编写时也不起作用:
cv::medianBlur(redMinusGreen, redGreenMedian, 3);
顺便说一句,我不必使用 CV_32S,但我需要能够在矩阵中存储负数。
注意:我尝试将矩阵中的所有数字设为正数,然后使用 medianBlur,但它仍然不起作用。
感谢所有帮助。提前致谢。