浅谈OpenCV——filter2D根据代码讲原理

1、filter2D使用实例代码

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
    Mat mat_SrcImage = imread("Demo.bmp");//在根目录下放一个Demo.bmp图片   
    if(!mat_SrcImage.data)//判断图像是否加载成功
    {
        cout << "图像加载失败!" << endl << endl;
        return -1;
    }    
    else
    {
        cout << "图像加载成功!" << endl << endl;
    }
    namedWindow("mat_SrcImage", WINDOW_AUTOSIZE);//定义显示图片窗口名称及类型
    imshow("mat_SrcImage", mat_SrcImage);//在图片窗口上显示图片
    Mat kenerl = (Mat_<char>(3,3) << 0, -1 ,  0,
                                    -1,  5 , -1,
                                     0, -1 ,  0  );//定义卷积核
    Mat mat_DstImage;
    filter2D(mat_SrcImage,mat_DstImage,mat_SrcImage.depth(),kenerl );
 // filter2D(原图,卷积运算之后的目标图,原图深度,卷积核 );
    namedWindow("mat_DstImage",WINDOW_AUTOSIZE);//定义显示图片窗口名称及类型
    imshow("mat_DstImage",mat_DstImage);//在图片窗口上显示图片
    waitKey(0);//等待键盘按键事件
    return 0;
}

2、原理分析

void cv::filter2D(InputArray   src,
                  OutputArray  dst,
                  int          ddepth,
                  InputArray   kernel,
                  Point        anchor=Point(-1, -1),
                  double       delta=0,
                  int          borderType=BORDER_DEFAULT
                  )

作用:库函数filter2D进行卷积运算。 

这个函数一般是用于图像的卷积。

参数介绍:

 ddepth的说明:

卷积核:

 卷积核其实就是一个矩阵,与原图对应位置进行相乘相加,把存的结果放到什么位置呢?放到锚点的位置。

锚:anchor

 anchor 则表示锚点(船如果停止的话,需要下锚到水底,达到稳定作用)。什么叫锚点呢?看下面示意图:

 

 

delta:
把卷积的结果加上一个固定的数字进行灰度的偏移。直观上看,它会把整个图像变亮或者变暗。从数学上来讲,它实际上将卷积过程扩展成了一般的线性运算(X 表示卷积):
dst=kernel X src+delta

这个线性运算可以将结果限定在某一符合要求的范围内(比如大于 0),而且不会阻断梯度的传递。

borderType
这个参数更改的是 border 的生成方式。这个 border指的是图像边缘,是在靠近边缘的部分卷积时用到的。无论 anchor 是什么,总有些边缘上的点对应的卷积范围无法完全落在原图内,这就需要对原图进行扩展。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林中青木

原创不易,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值