opencv函数源码之均值滤波(1)

本文介绍了OpenCV中实现模糊滤波的方法,包括boxFilter函数的使用及内部流程解析,并详细解释了如何通过调整参数来优化滤波效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是在参考毛星云大神的文章后写的,文章链接: http://blog.youkuaiyun.com/poem_qianmo/article/details/22745559

 

void cv::blur( InputArray src, OutputArray dst,
           Size ksize, Point anchor, int borderType )
{
    boxFilter( src, dst, -1, ksize, anchor, true, borderType );//见补充一
}
//================补充一: boxFilter================//
基本流程:复制原图到临时变量->处理ddepth<0的情况(在这里ddepth初始化值为-1)->处理边界类型->调用FilterEngine滤波引擎

void cv::boxFilter( InputArray _src, OutputArray _dst, int ddepth,
                Size ksize, Point anchor,
                bool normalize, int borderType )
{
    Mat src = _src.getMat();
    int sdepth = src.depth(), cn = src.channels();//源图像的深度,源图像的通道索引
    //处理ddepth小于零的情况
    if( ddepth < 0 )
        ddepth = sdepth;
    _dst.create( src.size(), CV_MAKETYPE(ddepth, cn) );//初始化目标图
    Mat dst = _dst.getMat();//复制目标图像Mat数据到临时变量,用于稍后的操作
    //调整卷积核的大小
    if( borderType != BORDER_CONSTANT && normalize && (borderType & BORDER_ISOLATED) != 0 )
    {
        if( src.rows == 1 )
            ksize.height = 1;
        if( src.cols == 1 )
            ksize.width = 1;
    }
    //若之前有过HAVE_TEGRA_OPTIMIZATION优化选项的定义,执行宏中的tegra优化
#ifdef HAVE_TEGRA_OPTIMIZATION
    if ( tegra::box(src, dst, ksize, anchor, normalize, borderType) )
        return;
#endif
     //调用FilterEngine滤波引擎,开始正式滤波;创建均值滤波器引擎
    Ptr<FilterEngine> f = createBoxFilter( src.type(), dst.type(),
                        ksize, anchor, normalize, borderType );
    f->apply( src, dst );
}
//==============补充二:Ptr<FilterEngine> ================//
Ptr<FilterEngine>是opencv进行滤波操作的引擎,ptr是动态创建指针模板,模板的类型为
FilterEngine

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值