图像处理(1):
线性滤波(2):线性滤波相关OpenCV源码剖析
一,OpenCV 中boxFilter函数源码解析;二,FilterEngine类解析:OpenCV图像滤波核心引擎;
三,OpenCV中blur函数源码剖析;
一,OpenCV 中boxFilter函数源码解析
我们可以在OpenCV的安装路径的\sources\modules\imgproc\src下的smooth.cpp源文件的第711行找到boxFilter函数的源代码。(但是源代码只限于曾经版本的opencv,最新版只有封装好的函数)。
原码如下:
//-----------------------------------【boxFilter()函数中文注释版源代码】----------------------------
// 代码作用:进行box Filter滤波操作的函数
// 说明:以下代码为来自于计算机开源视觉库OpenCV的官方源代码
// OpenCV源代码版本:2.4.8
// 源码路径:…\opencv\sources\modules\imgproc\src\smooth.cpp
// 源文件中如下代码的起始行数:711行
// 中文注释by浅墨
//--------------------------------------------------------------------------------------------------------
void cv::boxFilter( InputArray _src,OutputArray _dst, int ddepth,
Size ksize, Point anchor,
bool normalize, int borderType)
{
Mat src = _src.getMat();//拷贝源图的形参Mat数据到临时变量,用于稍后的操作
int sdepth =src.depth(), cn = src.channels();//定义int型临时变量,代表源图深度的sdepth,源图通道的引用cn
//处理ddepth小于零的情况
if( ddepth < 0 )
ddepth = sdepth;
_dst.create( src.size(), CV_MAKETYPE(ddepth, cn) );//初始化目标图
Mat dst =_dst.getMat();//拷贝目标图的形参Mat数据到临时变量,用于稍后的操作
//处理 borderType不为 BORDER_CONSTANT 且normalize为真的情况
if( borderType != BORDER