OpenCV学习笔记----边缘检测

第五个程序:边缘检测器

Canny边缘检测是一种常见的边缘检测算法,边缘检测的三大准则如下:

  1. 低错误率的边缘检测:检测算法应该精准的找到图像中的尽可能多的边缘,尽可能的减少漏检和误检
  2. 最优定位:检测的边缘点应当准确的位于边缘中心
  3. 图像中任意边缘应当只被标记一次,同时图像噪声不应产生伪边缘

Canny边缘检测的步骤:

  1. 图像灰度化:只有灰度图才能进行边缘检测
  2. 使用高斯滤波器,以平滑图像,消除噪声
  3. 计算图像中每个像素点的梯度强度和方向
  4. 应用非极大值抑制,以消除边缘检测带来的杂散相应
  5. 应用双非阈值检测来确定真实的边缘
  6. 通过抑制孤立的弱边缘来最终完成边缘检测

Canny函数原型

void Canny(	InputArray image, 
			OutputArray edges,
			double threshold1, 
			double threshold2,
			int apertureSize = 3, 
			bool L2gradient = false);

参数详解:

  1. image:输入图像,必须是单通道灰度图像
  2. edges:输出图像,单通道黑白图像
  3. threashold1和threashold2表示阈值最值,只有像素点梯度大于threashold1且小于threashold2时,数据才被保留
  4. apertureSize表示Soble算子大小,默认为3*3

程序源码如下:

#include 
using namespace cv;

int main()
{
    Mat img_rgb,img_gray,img_cny;

    img_rgb = imread("/home/wang/opencv/demo/1.jpg");
    cvtColor(img_rgb,img_gray,COLOR_BGR2GRAY);
    imshow("img_gray",img_gray);

    Canny(img_gray,img_cny,10,100,3,true);
    imshow("img_cny",img_cny);

    waitKey(0);
    return 0;
}

cvtcolor函数

cvtcolor函数用于色彩空间转换,常见的使用方法是将图片转化为灰度图、二值图、HSV和HSI等

函数原型:

void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

参数解释:

  1. src:原始图像
  2. dst:处理过的图像
  3. code:转换标识
  4. dstCn:通道数

程序编译语句如下:

g++ Canny.cpp -o Canny `pkg-config --cflags --libs opencv`

程序运行效果如下:

你可能感兴趣的:(OpenCV,opencv,计算机视觉,C++)