opencv开发笔记(三):cannny边缘检测

来源:互联网 发布:db2分页查询sql 编辑:程序博客网 时间:2024/06/06 06:29
// canny边缘检测.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat src = imread("f://12.jpg");
imshow("原图",src);
Mat dst, eage, gray;
dst.create(src.size(),src.type());  //创建与src同类型和大小的矩阵
cvtColor(src,gray,COLOR_BGR2GRAY);//转化为灰度图像
blur(gray,eage,Size(3,3));//3*3内核均值滤波降噪
Canny(eage, eage, 3, 9, 3);
imshow("效果图",eage);
waitKey(0);
    return 0;
}

对有噪声图像使用滤波器后的结果,使用均值滤波器过滤高斯噪声;使用中值滤波器过滤椒盐噪声。这两种滤波器都能够很好的去掉图像的噪声,但会对图像造成一定的模糊,尤其是均值滤波器造成的模糊比较明显。

CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,                        double threshold2, int  aperture_size CV_DEFAULT(3) );  

函数说明:
第一个参数表示输入图像,必须为单通道灰度图。
第二个参数表示输出的边缘图像,为单通道黑白图。
第三个参数和第四个参数表示阈值,这二个阈值中当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割即如果一个像素的梯度大与上限值,则被认为是边缘像素,如果小于下限阈值,则被抛弃。如果该点的梯度在两者之间则当这个点与高于上限值的像素点连接时我们才保留,否则删除。
第五个参数表示Sobel 算子大小,默认为3即表示一个3*3的矩阵。Sobel 算子与高斯拉普拉斯算子都是常用的边缘算子,详细的数学原理可以查阅专业书籍。



原创粉丝点击