知识点:
均值模糊(均值滤波):
blur(Mat src,Mat dst,Size(xradius,yradius))
// 原图 输出图 滤波窗口x大小,y大小 (长、宽)
高斯滤波:
GaussianBlur( Mat src, Mat dst, Size(xradius,yradius),double sigmaX, double sigmaY)
// 输入图 输出图 滤波窗口长、宽 可直接输0会自动计算
中值模糊:medianBlur(Mat src, Mat dest,int ksize);
// 窗口大小ksize*ksize(ksize为单个数字)
高斯双边滤波(Bilateral filter):
bilateralFilter(Mat src,Mat dest,int d, double sigmaColor, double sigmaSpace);
d:计算的半径,半径之内的像数都会被纳入计算,如果提供-1,会从后面的参数sigmaSpace中自动计算。ksize如果设定值大于5,那计算会很慢,所以一般设置都等于5,如果少数情况需要去除比较大的噪声,那么ksize=9。
sigmaColor:决定多少差值之内的像素会被计算,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
sigmaSpace:计算图像的空间偏移量。如果d的值大于0则声明无效,否则根据它来计算d值。如果该值较大,则意味着颜色相近的较远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器(http://en.wikipedia.org/wiki/Gaussian_filter)和α-截尾均值滤波器(去掉百分率为α的最小值和最大之后剩下像素的均值作为滤波器)
ω(i,j,k,l)=exp(−(i−k)2+(j−l)22σ2d−||f(i,j)−f(k,l)||2σ2r)
注意点:xradius,yradius都应该是奇数,只有奇数才有窗口中心。
创建可以可以调整(设定)大小的窗口:
窗口大小可调:1变成0即可。或者写成:WINDOW_NORMAL
namedWindow("窗口名",0);//创建窗口
imshow("窗口名",要显示的图片);//在创建的窗口中显示图片
固定大小窗口:
加入一个新的函数:cvResizeWindow
namedWindow("窗口名",0);//创建窗口
cvResizeWindow("窗口名", 500, 500); //创建一个500*500大小的窗口
imshow("窗口名",要显示的图片);//在创建的窗口中显示图片
理论知识点:
#include
#include
using namespace cv;
using namespace std;
RNG rng(123456);
int main(int agrc, char** agrv) {
Mat t1 = imread("zaosheng.png"),t2,t3,t4,t5;
if (!t1.data ) {
cout << "WRONG";
return -1;
}
blur(t1, t2, Size(5, 5), Point(-1, -1), BORDER_DEFAULT);
medianBlur(t1, t3, 5);
GaussianBlur(t1, t4, Size(5, 5), 0, 0, BORDER_DEFAULT);
bilateralFilter(t1, t5, 5, 15, 5, BORDER_DEFAULT);
imshow("t1", t1);
imshow("t2", t2);
imshow("t3", t3);
imshow("t4", t4);
imshow("t5", t5);
waitKey(0);
}
运行对比结果如图: