均值滤波
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
opencv提供均值滤波函数blur():
CV_EXPORTS_Wvoidblur( InputArraysrc, OutputArraydst, Sizeksize, Pointanchor=Point(-1,-1), intborderType=BORDER_DEFAULT );
C++实现:
usingnamespacestd; usingnamespacecv; intmain() { MatimgOri=imread("原图.jpg"); namedWindow("原图"); imshow("原图", imgOri); MatimgOut; blur(imgOri, imgOut, Size(20, 20)); namedWindow("效果图"); imshow("效果", imgOut); waitKey(0); returntrue; }
中值滤波
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。采用窗口内中值的方法,有效剔除了异常高亮或过暗的噪声,对椒盐噪声的去除效果比较好,但实际的图像会伴随着边缘纹理,由于只考虑中值,也会将图像细节去除,只是比均值滤波稍微好一点而已。
公式如下:
opencv提供高斯滤波函数medianBlur():
CV_EXPORTS_WvoidmedianBlur(InputArraysrc,OutputArraydst,intKsize//只能3,5,7,9后的奇数)
C++实现:
usingnamespacecv; intmain() { //载入图像Matimage=imread("1.jpg"); //创建窗口namedWindow("中值滤波原图"); namedWindow("中值滤波效果图"); //进行滤波Matout; medianBlur(image, out, 7); imshow("中值滤波原图", image); imshow("中值滤波效果图", out); waitKey(0); return0; }