anny算子有两个阈值,上限和下限,构造函数定义为:

void cvCanny(const CvArr* img,CvArr* edges,double lowthreshold,double highthreshold,int apertureSize=3);

需要注意的是canny需要输入的是灰度图像,所以我们在使用canny之前要使用cvCvtColor将之转换为灰度图像,一下程序对高低阈值不同比例,不同大小进行设置来观察cvCanny的显示效果:

// TestCanny.cpp : 定义控制台应用程序的入口点。
// 设置canny中的阈值,对参数进行实验

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

int main(int argc,char** argv)
{
 IplImage* src=cvLoadImage(argv[1],1);
 IplImage* gray=cvCreateImage(cvSize(src->width,src->height),8,1);
 IplImage* dst0=cvCreateImage(cvSize(src->width,src->height),8,1);
 IplImage* dst1=cvCreateImage(cvSize(src->width,src->height),8,1);
 IplImage* dst2=cvCreateImage(cvSize(src->width,src->height),8,1);
 IplImage* dst3=cvCreateImage(cvSize(src->width,src->height),8,1);
 cvCvtColor(src,gray,CV_RGB2GRAY);
 cvCanny(gray,dst0,50,75,3);
 cvCanny(gray,dst1,120,80,3);
 cvCanny(gray,dst3,120,30,3);
 cvCanny(gray,dst2,180,120,3);
 cvNamedWindow("gray",0);
 cvNamedWindow("dst0",0);
 cvNamedWindow("dst1",0);
 cvNamedWindow("dst2",0);
 cvNamedWindow("dst3",0);
 cvShowImage("gray",gray);
 cvShowImage("dst0",dst0);
 cvShowImage("dst1",dst1);
 cvShowImage("dst2",dst2);
 cvShowImage("dst3",dst2);
 cvWaitKey(0);
 cvReleaseImage(&gray);
 cvReleaseImage(&dst0);
 cvReleaseImage(&dst1);
 cvReleaseImage(&dst2);
 cvReleaseImage(&dst3);
 cvDestroyWindow("gray");
 cvDestroyWindow("dst0");
 cvDestroyWindow("dst1");
 cvDestroyWindow("dst2");
 cvDestroyWindow("dst3");
}

图1是显示高低阈值在相同比例不同大小的情况下显示的图像,很显然随着阈值的增加,图像的边缘也趋于明显,因为过滤了许多杂点。这点也是很容易理解的。
图2显示的是高低阈值的比例不同所显示的结果。
因此我们可以总结以上实验的结果从而获得canny算子得实质:如果一个像素的梯度大与上限值,则被认为是边缘像素,如果小于下限阈值,则被抛弃,那么如果该店的梯度位于两者之间呢?则当其与高于上限值的像素点连接时我们才保留,否则删除。

【OpenCV学习笔记】【函数学习】十二(cvCanny()函数及其阈值设置的比较)相关推荐

  1. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  2. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  3. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  4. Slicer学习笔记(六十二)slicer下导出模块接口

    Slicer学习笔记(六十二)slicer下导出模块接口 1. 参考文件实现 1. 参考文件实现 通过配置config_file为每一个生成类添加 Export,并为每个Module生成 Export ...

  5. Slicer学习笔记(四十二)slicer c++源码编译

    Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...

  6. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  7. 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的内核汇编代码. ;代码清单16-1;文件名 ...

  8. jquery设置宽_JavaScript学习笔记(三十二) jQuery(中)

    jQuery 昨天讲了 jQuery 的基本选择器筛选器和属性操作 今天来说一些 jQuery 别的东西 元素操作 创建一个元素 var div = $(') 内部插入元素 // 向 div 元素中插 ...

  9. Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...

    实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和 ...

  10. 系统架构师学习笔记_第十二章_连载

    第十二章  系统安全架构设计 12.1  信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1  信息安全的现状 ...

最新文章

  1. 如何利用 C# 爬取 One 持有者返利数据!
  2. CentOS 7 的初始化
  3. python 获取文件名_真实需求 | Python+os+openpyxl 批量获取Excel的文件名和最大行数...
  4. 钉钉用户数破5亿 低代码应用数8个月增长86万
  5. 【XAMPP】中mysql的admin页面打不开
  6. HDU 5778 abs
  7. $.ajax(0,jQuery Ajax显示0而不是Array(jQuery Ajax showing 0 instead of Array)
  8. MySoft.Data入门篇:编写业务逻辑
  9. Android-两种方式实现走马灯效果
  10. 超声波测距实验-传感器原理及应用实验
  11. MySQL数据库定期自动备份(定时任务)
  12. cf黑机器多久解除_CF永久解除机器码|CF机器码硬解封详细步骤教程+工具|CF辅助-QQ知啦娱乐网...
  13. run()方法和start()方法的区别
  14. 2016最新Java学习计划
  15. 苹果手机扫描文件并转换格式,怎么把扫描文件转换成文字,扫描出来的文件格式换个可以复制的文字
  16. 电脑手机生产力提升操作
  17. Qualcomm平台下基于QSEE的指纹识别方案移植之五多厂商兼容方案
  18. python查阅文献
  19. C#根据当前时间获取周,月,季度,年度等时间段的起止时间
  20. Android事件分发机制详解及解决文案:史上最全面、最易懂

热门文章

  1. 最好的5个C++ 网站
  2. 排序算法之三 选择排序(C++版本)
  3. uml边界类例子_UML中边界类、控制类和实体类
  4. java操作hbase使用hbase-client2依赖
  5. (day 52 - DFS) 剑指 Offer 68 - II. 二叉树的最近公共祖先
  6. html科学计算器,html+css+js实现科学计算器
  7. oracle如何储存超长汉子_oracle Clob 存储超长字符
  8. scala spark 数据对比_Spark 实践——用 Scala 和 Spark 进行数据分析
  9. SQL:postgresql中合并多个geom数据ST_Union以及比较两个geom数据是否相同ST_Equals
  10. mysql 1005 150_錯誤1005 errno:150與mysql