2016-04-21 52 views
0
cvSmooth(img, dst, CV_BILATERAL, 3,3,0,0); 

根据函数定义,它应该工作,但我得到的输入与没有任何平滑效果的输入相同。我不明白为什么其他平滑类型(高斯,中位数等)能够很好地工作。cvSmooth()函数的双边滤波

+0

请提供[mcve]。你如何比较图像?顺便说一句,OpenCV C API是**弃用** – Miki

回答

0

尝试增加您的西格马值。 Sigma1确定颜色在内核中的交互方式。 Sigma2基于空间距离确定加权。双边滤波器中零值的西格玛值意味着您正在使用零的空间和颜色域,这意味着不执行滤波。

+0

cvSmooth(img,dst,CV_BILATERAL,10,20,10,20);' 我也尝试过这种方式,但没有影响输出图像。 –

+0

还有一些误解。双边滤波器的窗口大小必须为正方形。你正在使用10,20。 cvSmooth将仅使用第一个大小参数,所以它实际上运行的是10x10内核光圈。你的空间西格马是20,比内核大。根据输入图像的位深度,颜色西格玛值可能太低而不能显着影响图像。如果输入是8位尝试类似(img,dst,CV_BILATERAL,10,10,120,10)。另外值得注意的是cvSmooth函数已被弃用。你应该使用bilateralFilter()来代替。 – BHawk