上面我们刚说到,medianBlur_SortNet 是一个函数模板,其源码于smooth.cpp的1439行开始,由于其函数体很长,我们在此只贴出它的函数声明。
template<class Op, class VecOp> static void medianBlur_SortNet( constMat& _src, Mat& _dst, int m );medianBlur函数使用中值滤波器来平滑(模糊)处理一张图片,从src输入,而结果从dst输出。
且对于多通道图片,每一个通道都单独进行处理,并且支持就地操作(In-placeoperation)。
C++: void medianBlur(InputArray src,OutputArray dst, int ksize)
参数详解:
调用范例:
//载入原图 Mat image=imread("1.jpg"); //进行中值滤波操作 Mat out; medianBlur( image, out, 7);用上面三句核心代码架起来的完整程序代码:
//-----------------------------------【程序说明】---------------------------------------------- // 说明:【中值滤波medianBlur函数的使用示例程序】 // 开发所用OpenCV版本:2.4.8 // 2014年4月3 日 Create by 浅墨 //------------------------------------------------------------------------------------------------ //-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程序所依赖的头文件 //---------------------------------------------------------------------------------------------- #include "opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" #include"opencv2/imgproc/imgproc.hpp" //-----------------------------------【命名空间声明部分】--------------------------------------- // 描述:包含程序所使用的命名空间 //----------------------------------------------------------------------------------------------- using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { //载入原图 Mat image=imread("1.jpg"); //创建窗口 namedWindow("中值滤波【原图】" ); namedWindow("中值滤波【效果图】"); //显示原图 imshow("中值滤波【原图】", image ); //进行中值滤波操作 Mat out; medianBlur( image, out, 7); //显示效果图 imshow("中值滤波【效果图】" ,out ); waitKey(0 ); }
运行效果图(孔径的线性尺寸为7):
3.2 双边滤波——bilateralFilter函数
用双边滤波器来处理一张图片,由src输入图片,结果于dst输出。
C++: void bilateralFilter(InputArray src, OutputArraydst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
调用代码示范如下:
//载入原图 Mat image=imread("1.jpg"); //进行双边滤波操作 Mat out; bilateralFilter( image, out, 25, 25*2, 25/2 );
用一个完整的示例程序把bilateralFilter函数熟悉一下:
//-----------------------------------【程序说明】---------------------------------------------- // 说明:【双边滤波bilateralFilter函数的使用示例程序】 // 开发所用OpenCV版本:2.4.8 // 2014年4月3 日 Create by 浅墨 //------------------------------------------------------------------------------------------------ //-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程序所依赖的头文件 //---------------------------------------------------------------------------------------------- #include "opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" #include"opencv2/imgproc/imgproc.hpp" //-----------------------------------【命名空间声明部分】--------------------------------------- // 描述:包含程序所使用的命名空间 //----------------------------------------------------------------------------------------------- using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { //载入原图 Mat image=imread("1.jpg"); //创建窗口 namedWindow("双边滤波【原图】" ); namedWindow("双边滤波【效果图】"); //显示原图 imshow("双边滤波【原图】", image ); //进行双边滤波操作 Mat out; bilateralFilter( image, out, 25, 25*2, 25/2 ); //显示效果图 imshow("双边滤波【效果图】" ,out ); waitKey(0 ); }运行效果图: