简单记录一下OpenCV的几种边缘检测函数的用法。

边缘检测算法
  以Sobel边缘检测算法为例。
  Sobel卷积核模板为:

OpenCV几种边缘检测的简例

偏导公式为:


  卷积核模板的图片又是从网上抄来的,实际上我都不是很确定,这样一直滑到最后一个(我就是这么理解卷积的)。
  不过到这里其实还只是做了一半,因为还只是算出来了方向的偏导数。

OpenCV几种边缘检测的简例

  公式(8.1)是梯度向量,梯度幅值为用公式(8.2)。但在实际使用中,为了提高计算的速度,我们可以用式(8.3)、(8.4)(8.5)来近似。(8.6)是梯度向量的方向角公式。
  所以,在计算出(i,j)处的处的幅值大于阈值T,则认为该点是边缘点。
  边缘检测大体都是这样,不同的算子只是卷积核不同。其实只要理解了图像数据是怎么进行卷积计算的,都可以自己设计算子,当然效果要好才有用。

附上一个OpenCV的几个边缘检测函数的简单使用的栗子。

#include "stdafx.h"

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main(int argc, char* argv[])
{
    Mat src = imread("F:\\picture\\cv53.jpg");
    Mat dst;

    //输入图像
    //输出图像
    //输入图像颜色通道数
    //x方向阶数
    //y方向阶数
    //Sobel(src,dst,src.depth(),1,1);
    //imwrite("sobel.jpg",dst);

    //输入图像
    //输出图像
    //输入图像颜色通道数
    //Laplacian(src,dst,src.depth());
    //imwrite("laplacian.jpg",dst);

    //输入图像
    //输出图像
    //彩色转灰度
    cvtColor(src,src,CV_BGR2GRAY);  //canny只处理灰度图

    //输入图像
    //输出图像
    //低阈值
    //高阈值,opencv建议是低阈值的3倍
    //内部sobel滤波器大小
    Canny(src,dst,50,150,3);    
    imwrite("canny71.jpg",dst);

    imshow("dst",dst);
    waitKey();

    return 0;
}

  想测试那种边缘检测,就把注释修改一下即可。

相关文章:

  • 2021-07-17
  • 2021-09-24
  • 2022-02-02
  • 2021-11-10
  • 2021-09-19
  • 2022-02-21
  • 2021-12-24
猜你喜欢
  • 2021-11-01
  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2021-04-08
相关资源
相似解决方案