中值滤波将每个像素替换为围绕这个像素得矩形邻域内。小于滤波器面积一半的物体基本上会被滤除,而较大的物体几乎会原封不动的保存下来,所以中值滤波对处理噪声非常有效,能减弱高频分量,同时也影响低频分量。
效果:
函数原型:
CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );
src:输入1-、3-或4通道图像;当ksize为3或5时,图像深度应为CV_8U, CV_16U,或CV_32F,对于大孔径,它只能是CV_8U
dst:与src相同大小和类型的目标数组
ksize :孔径线性尺寸;它必须是奇数且大于1,例如:3,5,7…
代码:
void example()
{
cv::Mat input = cv::imread("d:\\desktop\\picture\\test.jpg"), output;
cv::namedWindow("example");
int blockSize = 1, blockSize_test = 1;
cv::createTrackbar("blockSize", "example", &blockSize_test, 20);
for(;;)
{
blockSize = blockSize_test;
if(blockSize_test < 1)
blockSize = 1;
cv::medianBlur(input, output, blockSize*2+1);
cv::imshow("example", output);
if(cv::waitKey(100) == 27)
break;
}
}