您好、欢迎来到现金彩票网!
当前位置:2019正版免费全年资料 > 凸包逼近 >

轮廓的查找、表达、绘制、特性及匹…

发布时间:2019-07-03 08:33 来源:未知 编辑:admin

  首先我们面对的问题是如何在图像中找到轮廓,OpenCv(EmguCv)为我们做了很多工作,我们的任务只是调用现成的函数而已。ImageTColor,TDepth类的FindContours方法可以很方便的查找轮廓,不过在查找之前,我们需要将彩色图像转换成灰度图像,然后再将灰度图像转换成二值图像。代码如下所示:

  使用上面的代码可以得到图像的默认轮廓,但是轮廓在电脑中是如何表达的呢?在OpenCv(EmguCv)中提供了两类表达轮廓的方式:顶点的序列、Freeman链码。

  用多个顶点(或各点间的线段)来表达轮廓。假设要表达一个从(0,0)到(2,2)的矩形,

  (2)如果用点间的线段来表达轮廓,那么依次存储的可能是:(0,0),(2,0),(2,2),(0,2)。

  Freeman链码需要一个起点,以及从起点出发的一系列位移。每个位移有8个方向,从0~7分别指向从正北开始的8个方向。假设要用Freeman链码表达从(0,0)到(2,2)的矩形,可能的表示方法是:起点(0,0),方向链2,2,4,4,6,6,0,0。

  EmguCv对Freeman链码的支持很少,我们需要做一系列的工作才能在使用Freeman链码:

  需要注意的是:cvReadChainPoint函数似乎永远不会满足循环终止的条件,即ptrReader永远不会被置为null,这跟《学习OpenCv》和参考上不一致;我们需要用chain.total来辅助终止循环,读取了所有的点之后就可以罢手了。

  在查找到轮廓之后,不同轮廓是怎么组织的呢?根据不同的选择,它们可能是:(1)列表;(2)双层结构;(3)树型结构。

  从纵向上来看,列表只有一层,双层结构有一或者两层,树型结构可能有一层或者多层。

  轮廓的绘制比较简单,用上面提到的方法取得轮廓的所有点,然后把这些点连接成一个多边形即可。

  当然,对于用顶点序列表示的轮廓,用ImageTColor,TDepth.Draw方法或者cvDrawContours函数可以很方便的绘制出轮廓。我发现,如果将参数max_level设置成2,可以绘制出所有的轮廓。

  可以使用cvFindDominantPoints函数来获取轮廓上的关键点,该函数返回的结果一个包含 关键点在轮廓顶点中索引的序列。再次强调:是索引,不是具体的点。如果要得到关键点的具体坐标,可以用索引到轮廓上去找。

  intidx=seq[i];//关键点序列中存储的数据是 关键点在轮廓中所处位置的索引

  (1)矩形:在图像处理系统中提供了一种叫Rectangle的矩形,不过它只能表达边垂直或水平的特例;OpenCv中还有一种叫Box的矩形,它跟数学上的矩形一致,只要4个角是直角即可。

  如果要获取轮廓的圆形边界框,可以使用cvMinEnclosingCircle函数。

  轮廓树用来描述某个特定轮廓的内部特征。注意:轮廓树跟轮廓是一一对应的关系;轮廓树不用于描述多个轮廓之间的层次关系。

  轮廓的凸包和凸缺陷用于描述物体的外形。凸包和凸缺陷很容易获得,不过我目前不知道它们到底怎么使用。

  (1)轮廓保存的是一系列的顶点,轮廓是由一系列线段组成的多边形。对于看起来光滑的轮廓(例如圆),只是线段条数比较多,线段长度比较短而已。实际上,电脑中显示的任何曲线)每两条线段之间都有一定的关系,包括它们(或者它们的延长线)之间的夹角,两条线)每两条线段上的点之间还有距离关系,包括最短(小)距离、最远(大)距离,以及平均距离。最大距离我用了一个偷懒的计算方法,我把轮廓外界矩形的对角线长度看作了最大距离。

  如果要比较两个物体,可供选择的特征很多。如果要判断某个人的性别,可以根据他(她)头发的长短来判断,这很直观,在长发男稀有的年代准确率也很高。也可以根据这个人尿尿的射程来判断,如果射程大于0.50米,则是男性。总之,方法很多,不一而足。我们在上文中得到了轮廓的这么多特征,它们也可以用于进行匹配。典型的轮廓匹配方法有:Hu矩匹配、轮廓树匹配、成对几何直方图匹配。

  轮廓的Hu矩对包括缩放、旋转和镜像映射在内的变化具有不变性。ContourPoint.MatchShapes方法和cvMatchShapes函数可以很方便的实现对2个轮廓间的匹配。

  用树的形式比较两个轮廓。cvMatchContourTrees函数实现了轮廓树的对比。

  在得到轮廓的成对几何直方图之后,可以使用直方图对比的方法来进行匹配。如果您和我一样忘记了直方图的对比方式,可以看看我写的另一篇文章《颜色直方图的计算、显示、处理、对比及反向投影(How to Use Histogram? Calculate, Show, Process, Compare and BackProject)》。

  通过以上代码,可以计算出两个轮廓对比的值,但是这些值具体代表什么意义呢?实际上,我目前还不清楚,需要进行大量的试验才行。

  GitHub怎么用?GitHub是什么?新手怎么用GitHub?这些问题都不是问题了:英文10分【满分100分】水平的人来说:这个教程和小说很重要!这妮儿图文并茂,比我还幽默汗!!!,我就直接转载过来...

  在许多计算机专业的学生眼里,CS有三宝,StackOverflow,Google和GitHub,如果说前两者,在实在不想看英语时,还可以用“csdn等中文技术论坛”、“百度”来暂时代替一下,以解燃眉之...

  首先,你需要注册一个 github账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本文中假设用户名为 chuaaqiCSDN(我的博客名的全拼) 一、gihub...

  我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的。 其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别...

  Git已经变得非常流行,连Codeplex现在也已经主推Git。Github上更是充斥着各种高质量的开源项目,比如ruby on rails,cocos2d等等。对于习惯Windows图形界面的程序员...

  Github解释:gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名gitHub。注:本文章仅帮助读者入门github正文:1、仓库reposito...

  写在前面:我身边好多人问我git和github的区别,想必对于好多人没学过的大佬们恐怕也是一脸懵逼,但是不知道也是不行的,所以我今天就来讲一讲这二者的区别和联系。用一句话形容这二者的关系:git是弓,...

  GitHub什么是GitHub?Git与Svn有何不同?使用Git注意点:GitHub中创建项目组创建完成后,找到此项目组,创建属于自己的第一个子项目。克隆项目什么是GitHub?gitHub是一个面...

  源博客地址首先,我先对GitHub来一个简单的介绍,GitHub有一个很强大的功能就是...

  首先,你需要注册一个github账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本文中假设用户名为 chuaaqiCSDN(我的博客名的全拼)一、gihub账号...

  应大家要求,已将前期一些代码传至GitHub。用户名:ququcai,地址:。后续还会新增代码,欢迎关注。...

  收藏及篇学习github的文章:从0开始学习GITHUB系列之「初识GITHUB」

  Github中并不提供单个文件夹下载,每当下载仓库中某个文件夹时,只能克隆整个仓库,浪费硬盘空间不说,浪费时间不说,每次克隆仓库时候,看到这下下载速度简直…!网上的教程有的过于复杂,有的过于繁琐,都不...

  版权声明:本文为徐代龙原创文章,未经徐代龙允许不得转载。(一)前言:建议:慢慢...

  GitHub指南原文地址:GitHub官网指南示例项目:HelloWorld十分钟轻松教学在学习计算机语言编程的过程中创建HelloWorld项目是一个历史悠久的传统。当你接触一门新事物的时候可以...

  免费顶级域名+github个人主页的教程1.免费顶级域名申请世界上的免费顶级域名有.tk.ml.ga.cf.gq申请地址个人主页在gith...

  我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的。其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人...

  因为没用过git,没有过协同开发经验,所以一直不太理解git工具的作用,现在就来梳理一下git工具的用法以及作用。一、入门篇从前,有3个人,他们想一起开发一个项目。小白:听说最近github很火啊,我...

  自上次写新浪博客以来,已经很久没有更新了~近期又有了时间回到博客上来,为了能够和同事同学们同步起来,从今日起我的博客将搬至csdn(

  要了解Github,我们首先要知道Git,Git是管理代码的工具,写代码不是件轻松的事儿,一个人写的时候已经不轻松了,一群人写就更不轻松了,但这世界上很多事都是怎么不轻松怎么来的,大部分人都会和别人一...

  用swift写服务器的已经不是什么新鲜事了,这几年的发展,也是swift在服务端的表现越来越成熟,目前比较流行服务端框架主要有Vapor、Perfect、Kitura和Zewo,他们各有长短,本人这次...

  把预览的图片数据处理一下就好,很自然的我只是用了onPreviewFrame调用,考虑处理传递进来的data数据流就是了。data字节流默认是YCbCr_420_SP有人提供了这么一段转换的代码:将d...

  文章目录前言几个命令创建任意目录的脚本原理讲解js里面的printjs里面的建立目录js里面读写Node.js脚本shebang总结作业题(重点有上传github模板)前言其实脚本原本来自戏剧舞台,比...

  文章目录第1步:生成SSHkey第2步:添加SSHkey第3步:验证绑定是否成功我们已经对GitHub有了一定的了解,包括创建仓库、拉分支,或者通过Cloneordownload克隆或者下载代码;我们...

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...

  这一篇,代码折腾的时间较长,完成之后都是一些小细节,主要有三:n1、引入的依赖错误;n2、启动配置错误;n3、xml文件的mapper命名空间错误。n一、完整的pom.xmlnn...

  本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。1、 Esp8266之 搭建开发环境,开始一个“hellow worl...

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  采用EasyUI 1.4.x 版本,默认default风格,异步加载页面,多Tab页展示,使用JSON文件模拟从后台动态获取数据。...

  接着上次的图书管理系统rnrn修改完问题后把SpringBoot成功部署到了服务器上rn测试了下api接口,能正常访问rn那么下面就是在服务器上部署前端的vue.js了rnrnrn这里的话我们要明确一...

  :说的太棒了,有时候小小的偷懒滥用UpdateData(False)简直是浪费好多排查时间

  :[reply]hzq[/reply] 您好,您有博主的github的地址吗?可以发我一份吗?感激不尽

http://exlei.net/tubaobijin/314.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有