C++ OpenCV凸包检测

凸包

凸包指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。凸包(凸壳)能包含点集中所有的点,凸包检测常应用在物体识别、手势识别及边界检测等领域。

一个轮廓可以有无数个包围它的外壳,而其中表面积最小的一个外壳,就是凸包。

相关API

OpenCV中提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状的凸包缺陷分析时使用

void convexHull( InputArray points, OutputArray hull, bool clockwise = false, bool returnPoints = true );

  • points:输入二维点集(一般为轮廓点集),这些点集被存储在容器vector或Mat中,在下面的源码中,我是强制转化为了Mat类型。
  • hull:凸包点集输出。类型要么为整型向量,要么为点集向量,如果是整型向量,那么存储的只是索引,索引的对象是输入二维点集(如果不懂这句话的意思,看一遍下面给出的源码就清楚了)。
  • clockwise:凸包方向的标志位。如果是true,那么是基于顺时针方向,如果是false,那么是基于反时针方向。
  • returnPoints: 表示返回点个数,如果第二个参数是vector<Point>则自动忽略

代码演示

实现步骤

  1. 图像从RGB转换为灰度图
  2. 灰度图转为二值图像
  3. 通过发现轮廓得到候选点
  4. 凸包API调 用
  5. 绘制显示

新建一个项目opencv-0024,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法

凸包的处理代码

下面是显示效果

我们再换几个图像试试看看效果


-END-

本文分享自微信公众号 - 微卡智享(VaccaeShare)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏A周立SpringCloud

AWS CTO对过去十年的经验总结 – 十条军规

AWS(Amazon Web Service) 开始于 2006 年 3 月 14 日 Amazon S3 的发布,距今已有十年时间。回首过去十年,我们在构建和...

7720
来自专栏这里只有VxWorks

Task之任务的删除

taskExit()会终止当前任务,并删除任务的Stack与TCB。事实上,执行完最后一条语句时,就会自动调用taskExit()。也就是说一般情况下,代码中没...

9830
来自专栏A周立SpringCloud

跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析

地址硬编码问题——电影微服务中将用户微服务的地址写死,如果用户微服务地址发生变化,难道要重新上线电影微服务吗?

12230
来自专栏A周立SpringCloud

跟我学Spring Cloud(Finchley版)-17-Zuul路由配置详解

默认的路由规则是:访问 $ZUUL_URL/指定为服务/** 会被转发到 指定微服务 的 /** 。

11540
来自专栏这里只有VxWorks

Task之任务的控制

任务被taskSpawn()创建或taskActivate()激活后,直接进入Ready队列。但实际运行时,任务大部分时间处于其它状态,并不是Ready态,不然...

10920
来自专栏A周立SpringCloud

JDK 12即将发布!你还学得动吗?

由此可知,目前JDK 12已处于Rampdown Phase One阶段,所有的新特性已经冻结,不会再针对其他JEP(JDK Enhancement Propo...

9720
来自专栏Young Dreamer

前端页面性能指标与采集方式

目前业界常用的指标就是:白屏、首屏、domready和pageloaded四个指标,在usual-index.html中, 我们通过performance A...

24620
来自专栏菩提树下的杨过

webrtc笔记(2): 1对1实时视频/语音通讯原理概述

开始正文之前,先思考1个问题:2个处于不同网络环境的(具备摄像头/麦克风多媒体设备的)浏览器,要实现点对点的实时视频/语音通讯,难点在哪?

24430
来自专栏这里只有VxWorks

Task之任务的创建

我们在《任务是啥?》里提到过,Task可以看作是Stack和TCB组成的。因此taskSpawn()的第一步就是为Stack和TCB分配内存,然后初始化它们,最...

10430
来自专栏极乐技术社区

精读《Vue3.0 Function API》

Vue 3.0 的发布引起了轩然大波,让我们解读下它的 function api RFC 详细了解一下 Vue 团队是怎么想的吧!

18220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励