“平滑”通常又称“模糊”,是一种简单常用的图像处理操作。进行平滑处理的原因有很多,但通常是用来去除噪声和相机失真,平滑在按照一定的原理来降低图像分辨率中也有重要应用。
OpenCV2和OpenCV3中提供了5种不同的平滑处理方法,每一种都有自己相关的库函数,每一个库函数实现的平滑都略有不同。在所有的平滑操作函数中,src和dst两个参数都分别代表源图像和目标图像。除此之外,每一种平滑操作都具有特定的相关操作参数。其中,唯一的共同参数是最后的borderType,这个参数表示平滑操作的过程中如何处理图像的边缘的像素。
下面将分别对这5中平滑操作函数进行介绍。
1、cv::blur()
void cv::blur(
cv::InputArray src, // 输入图像
cv::OutputArray dst, // 输出图像
cv::Size ksize, // 核大小
cv::Point anchor = cv::Point(-1,-1), // 锚点位置
int borderType = cv::BORDER_DEFAULT // 边界处理方法
);
cv::blur()又被称作“简单平滑”操作,输出图像中的每个像素值,为窗口中(如核)所有像素的简单平均值,窗口的大小通过ksize参数指定。参数anchor可以用来指定内核是如何与被计算的像素对齐的。默认情况下,anchor的取值为cv::Point(-1,-1),这意味着,核相对于滤波器居中。在多通道图像中,每个通道需要分别计算。
cv::blur()实际上是下面要介绍的cv::boxFilter()的一个特例,实际平滑效果如下。