OpenCV 使用自定义线性滤波比较Robert、Sobel、拉普拉斯算子

1、概述

  案例:利用OpenCV提供的filter2D自定义线性滤波对Robert、Sobel、拉普拉斯算子进行比较

filter2D方法filter2D(
  Mat src, //输入图像
  Mat dst, // 模糊图像
  int depth, // 图像深度32/8
  Mat kernel, // 卷积核/模板
  Point anchor, // 锚点位置
  double delta // 计算出来的像素+delta
)

ps:

    1.会使用robert计算x、y方向及xy合并后的梯度

    2.会使用sobel计算x、y方向及xy合并后的图像梯度

    3.会使用拉普拉斯算子计算图像梯度

  常用的算子如下图所示:

 

2、代码示例

2.1、计算robert的x、y算子的梯度图像,计算sobel的x、y算子的梯度图像 ,计算拉普拉斯算子的梯度图像 

Mat src = imread(filePath);//原图
    Mat dst;
    imshow("src",src);
    Mat  kernel_robert_x = (Mat_<int>(2,2) << 1,0,0,-1);//robert x方向算子
    filter2D(src,dst,-1,kernel_robert_x,Point(-1,-1),0);//自定义线性滤波
    imshow("kernel_robert_x",dst);

    Mat kernel_robert_y = (Mat_<int>(2,2) << 0,1,-1,0);//robert y方向上算子
    filter2D(src,dst,-1,kernel_robert_y,Point(-1,-1),0);//自定义线性滤波
    imshow("kernel_robert_y",dst);


    Mat kernel_sobel_x = (Mat_<int>(3,3) << -1,0,1,-2,0,2,-1,0,1);//sobel x方向上算子
    filter2D(src,dst,-1,kernel_sobel_x,Point(-1,-1),0);//自定义线性滤波
    imshow("kernel_sobel_x",dst);


    Mat kernel_sobel_y = (Mat_<int>(3,3) << -1,-2,-1,0,0,0,1,2,1);//sobel y方向上算子
    filter2D(src,dst,-1,kernel_sobel_y,Point(-1,-1),0);//自定义线性滤波
    imshow("kernel_sobel_y",dst);

    Mat kernel = (Mat_<int>(3,3) << 0,-1,0,-1,4,-1,0,-1,0);//拉普拉斯算子
    filter2D(src,dst,-1,kernel,Point(-1,-1),0);//自定义线性滤波
    imshow("kernel",dst);

2.2、比较rebort的x、y及xy合并后的梯度图像,比较sobel的x、y及xy合并后的梯度图像

Mat src = imread(filePath);
     Mat dst_robert_x;
     Mat dst_robert_y;
     imshow("src",src);
     Mat  kernel_robert_x = (Mat_<int>(2,2) << 1,0,0,-1);//robert x方向算子
     filter2D(src,dst_robert_x,-1,kernel_robert_x,Point(-1,-1),0);//自定义线性滤波
     imshow("dst_robert_x",dst_robert_x);

     Mat kernel_robert_y = (Mat_<int>(2,2) << 0,1,-1,0);//robert y方向上算子
     filter2D(src,dst_robert_y,-1,kernel_robert_y,Point(-1,-1),0);//自定义线性滤波
     imshow("dst_robert_y",dst_robert_y);

     //合并
     Mat dst_robert_result;
     addWeighted(dst_robert_x,0.5,dst_robert_y,0.5,1,dst_robert_result);//对图像进行平均权重相加得到一个完整的用robert计算的梯度图像
     imshow("dst_robert_result",dst_robert_result);

     Mat dst_sobel_x;
     Mat dst_sobel_y;
     Mat kernel_sobel_x = (Mat_<int>(3,3) << -1,0,1,-2,0,2,-1,0,1);//sobel x方向上算子
     filter2D(src,dst_sobel_x,-1,kernel_sobel_x,Point(-1,-1),0);//自定义线性滤波
     imshow("dst_sobel_x",dst_sobel_x);


     Mat kernel_sobel_y = (Mat_<int>(3,3) << -1,-2,-1,0,0,0,1,2,1);//sobel y方向上算子
     filter2D(src,dst_sobel_y,-1,kernel_sobel_y,Point(-1,-1),0);//自定义线性滤波
     imshow("dst_sobel_y",dst_sobel_y);

     //合并
     Mat dst_sobel_result;
     addWeighted(dst_sobel_x,0.5,dst_sobel_y,0.5,1,dst_sobel_result);//对图像进行平均权重相加得到一个用sobel算子计算的梯度图像
     imshow("dst_sobel_result",dst_sobel_result);

 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值