关闭

opencv cvCanny算子以及与其他边缘检测算子的比较

标签: opencv图像处理
1074人阅读 评论(0) 收藏 举报
分类:

边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny)

http://blog.sina.com.cn/s/blog_60a0e97e0101b595.html


###################################################

图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)

http://blog.csdn.net/xiaojiegege123456/article/details/7714863


##################################################3


/* Smoothes array (removes noise) */
CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),
                      int size1 CV_DEFAULT(3),
                      int size2 CV_DEFAULT(0),
                      double sigma1 CV_DEFAULT(0),
                      double sigma2 CV_DEFAULT(0));

"平滑处理"也称“模糊处理”(blurring)

主要功能:减少图像上的噪声或者失真


/* Runs canny edge detector */
CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1,
                      double threshold2, int  aperture_size CV_DEFAULT(3) );

image:输入图像(源图像)

edges:边缘检测图像(结果图像)

threshold1:低阈值 (上下限阈值比为2:1或3:1之间较好)

threshold2:高阈值


canny算子原理:首先在x和y方向求一阶倒数,然后组合为4个方向的导数。这些方向倒数达到局部最大值的点就是组成边缘的候选点

canny算子有两个阈值,如果一个像素的梯度大于上限阈值,则被认为是边缘像素,如果低于下限阈值,则被抛弃,如果介于二者之间,只有当其与高于上限阈值的像素连接时才会被接受。

note:cvCanny()函数需要输入一幅灰度图,输出图也一定是灰度图像


程序:进行平滑处理后的canny()算子检测图和未进行平滑处理的检测图

//cvCanny
void canny(void)
{
	IplImage *src=cvLoadImage("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	IplImage *dst_NoSmooth=cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *dst_Smooth=cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	if (src == NULL || dst_NoSmooth == NULL || dst_Smooth == NULL)
		exit(0);

	cvCanny(src, dst_NoSmooth, 100, 150, 3);

	cvSmooth(src, src, CV_GAUSSIAN, 3, 3);//平滑图像处理-高斯模糊

	cvCanny(src, dst_Smooth, 100, 150, 3);

	cvNamedWindow("src");
	cvNamedWindow("dst_Smooth");
	cvNamedWindow("dst_NoSmooth");
	cvShowImage("src", src);
	cvShowImage("dst_Smooth", dst_Smooth);
	cvShowImage("dst_NoSmooth", dst_NoSmooth);
	cvWaitKey(0);
	cvReleaseImage(&src);
	cvReleaseImage(&dst_Smooth);
	cvReleaseImage(&dst_NoSmooth);
	cvDestroyAllWindows();
}




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

opencv cvCanny算子以及与其他边缘检测算子的比较

边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny) http://blog.sina.com.cn/s/blog_60a0e97e0101b595...
  • u012005313
  • u012005313
  • 2015-07-08 10:44
  • 1074

Opencv2系列学习笔记9(使用Canny算子检测轮廓)

前面我们用sobel算子和拉普拉斯变换也可以进行边缘检测,见我的上一篇blog: http://blog.csdn.net/lu597203933/article/details/17252285 但...
  • Lu597203933
  • Lu597203933
  • 2013-12-16 22:07
  • 9366

几种图像边缘检测算子的比较

不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界...
  • sinat_32974931
  • sinat_32974931
  • 2016-04-11 21:02
  • 2297

OpenCV图像处理篇之边缘检测算子

3种边缘检测算子灰度或结构等信息的突变位置是图像的边缘,图像的边缘有幅度和方向属性,沿边缘方向像素变化缓慢,垂直边缘方向像素变化剧烈。因此,边缘上的变化能通过梯度计算出来。一阶导数的梯度算子对于二维的...
  • xiahouzuoxin
  • xiahouzuoxin
  • 2014-11-16 15:41
  • 33336

Sobel(索贝尔)边缘检测算子分析及opencv程序测试

[原创]Sobel(索贝尔)边缘检测算子分析及opencv程序测试 Author: chad Mail: linczone@163.com 推荐参考文件 前言图像的边缘时图像最基...
  • linczone
  • linczone
  • 2015-07-24 15:05
  • 1739

基于OPENCV的CANNY边缘检测算子详细代码实现

关于canny算子边缘检测的原理,此处不再做详细说明,这里直接将实现代码附在下面。读者可对照代码,进行学习。 //canny边缘检测算子 /* #include   #include #i...
  • qq_22562949
  • qq_22562949
  • 2015-05-27 15:50
  • 1117

opencv3.1学习笔记(2)边缘检测算子

1.引言入手目标检测有段时间了,之前一直想着通过论文找解决方案,几篇通读下来,发现论文实验结果挺好看,但并不一定适合自己的项目。经公司前辈指点,针对我们的项目问题,可以用最基本的数字图像处理方法来解决...
  • wangnianbing
  • wangnianbing
  • 2017-04-29 21:48
  • 152

经典边缘检测算子比较

  • 2014-02-16 10:13
  • 1.52MB
  • 下载

几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括:深度上的不连续、表面方向不连续、物质属性变化和...
  • gdut2015go
  • gdut2015go
  • 2015-07-06 21:23
  • 17154

差分、梯度、Roberts、sobel、Prewitt、Laplace边缘检测算子的介绍、评估和比较

  • 2012-07-02 12:51
  • 540KB
  • 下载
    个人资料
    • 访问:773648次
    • 积分:9785
    • 等级:
    • 排名:第2087名
    • 原创:311篇
    • 转载:40篇
    • 译文:10篇
    • 评论:87条
    博客专栏
    文章分类
    最新评论