当前位置: 首页 > news >正文

凸缺陷 convexityDefects

获取凸包,可以参考我的这篇文章: 凸包(Convex Hull)代码实现案例

获取了凸包之后,可以干什么呢?
凸缺陷凸包与轮廓之间的部分称为凸缺陷。凸缺陷可用来处理手势识别等问题。
在这里插入图片描述
通常情况下,使用如下四个特征值来表示凸缺陷:
● 起点:该特征值用于说明当前凸缺陷的起点位置。需要注意的是,起点值用轮廓索引表示。也就是说,起点一定是轮廓中的一个点,并且用其在轮廓中的序号来表示。例如,点A是凸缺陷1的起点。
● 终点:该特征值用于说明当前凸缺陷的终点位置。该值也是使用轮廓索引表示的。例如,图8-4中的点B是凸缺陷1的终点。
● 轮廓上距离凸包最远的点。例如,点C是凸缺陷1中的轮廓上距离凸包最远的点。
● 最远点到凸包的近似距离。例如,距离D是凸缺陷1中的最远点到凸包的近似距离。

OpenCV提供了函数cconvexityDefects()用来获取凸缺陷,其语法格式如下:
CONVEXITYDEFECTS()是OpenCV库中的一个函数,主要用于计算图像中凸缺陷的信息。它可以通过输入的轮廓点信息计算出凸缺陷的数量、位置和深度等信息,可以用于手势识别、目标检测等应用场景。在C++中使用该函数时,需要包含OpenCV头文件,并按照函数参数要求输入轮廓点信息和凸包点信息等参数,然后通过输出参数获取凸缺陷信息。

void cv::convexityDefects(    InputArray contour,     InputArray convexhull,     OutputArray convexityDefects);

函数参数说明如下:

  • contour:输入的轮廓点信息,可以通过cv::findContours()函数获取。
  • convexhull:输入的凸包点信息,可以通过cv::convexHull()函数获取。
  • convexityDefects:输出的凸缺陷信息,是一个N行4列的矩阵,每行包含4个元素,分别是凸缺陷起点索引、终点索引、最远点索引和距离

使用CONVEXITYDEFECTS()函数的步骤如下:

    1. 读取图像并转换为灰度图像。
Mat src = imread("image.jpg");
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
    1. 对灰度图像进行二值化处理。
Mat binary;threshold(gray, binary, 100, 255, THRESH_BINARY);
  • 3.获取图像中的轮廓信息。
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
  • 4.对每个轮廓计算凸包点信息。
vector<vector<int>> hull(contours.size());
for (int i = 0; i < contours.size(); i++){   convexHull(contours[i], hull[i], false);}
  • 5.对每个轮廓计算凸缺陷信息。
vector<vector<Vec4i>> defects(contours.size());for (int i = 0; i < contours.size(); i++) { if (hull[i].size() > 3) {  convexityDefects(contours[i], hull[i], defects[i]);  }}
  • 6.遍历所有轮廓的凸缺陷信息,并绘制凸缺陷。
for (int i = 0; i < contours.size(); i++) {    for (int j = 0; j < defects[i].size(); j++) {        Vec4i& v = defects[i][j];        float depth = v[3] / 256.0;        if (depth > 10) {            int startidx = v[0];            Point start(contours[i][startidx]);            int endidx = v[1];            Point end(contours[i][endidx]);            int faridx = v[2];            Point far(contours[i][faridx]);            line(src, start, end, Scalar(0, 0, 255), 2);            line(src, start, far, Scalar(0, 255, 0), 2);            line(src, end, far, Scalar(0, 255, 0), 2);            circle(src, far, 4, Scalar(0, 255, 0), -1);  }    }
}

这样就可以计算图像中轮廓的凸缺陷信息,并绘制凸缺陷。

总结一下,CONVEXITYDEFECTS()函数是OpenCV中用于计算轮廓凸缺陷信息的函数,可以用于手势识别、目标检测等应用场景。使用该函数时,需要先获取轮廓和凸包信息,然后使用该函数计算凸缺陷信息,并根据需求对凸缺陷进行处理和绘制。

应用:

针对手势进行凸缺陷检测,可以实现手势识别。此时,仅计算指缝间的凸缺陷个数,根据该值识别手势表示的数值。
例如
● 有4个凸缺陷时,手势表示数值5。
● 有3个凸缺陷时,手势表示数值4。
● 有2个凸缺陷时,手势表示数值3。
● 有1个凸缺陷时,手势表示数值2。
● 有0个凸缺陷时,手势可能表示数值1,也可能表示数值0。

相关文章:

凸缺陷 convexityDefects

获取凸包&#xff0c;可以参考我的这篇文章&#xff1a; 凸包&#xff08;Convex Hull&#xff09;代码实现案例 获取了凸包之后&#xff0c;可以干什么呢&#xff1f; 凸缺陷凸包与轮廓之间的部分称为凸缺陷。凸缺陷可用来处理手势识别等问题。 通常情况下&#xff0c;使用如…...

c语言编程练习题:7-43 Shuffling Machine

Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid “inside jobs” where employees collaborate with gamblers by performing inadequate shuffles, many casinos empl…...

ffmpeg enum AVChannel枚举解析

AVChannel枚举是在2022-12-20的提交中添加的&#xff0c;对应的版本号是5.1. 这个提交的描述是"avutil/channel_layout: add AVChannel enum and related functions"。 原型 typedef struct AVChannelCustom {enum AVChannel id;char name[16];void *opaque; } AVCh…...

invest模型教程

详情点击链接&#xff1a;invest模型教程——建议收藏 1.生态系统服务 2.InVEST模型 3.InVEST所需数据&#xff08;分辨率、格式、投影系统等&#xff09;、获取及标准化预处理 4.InVEST运行 5.ArcGIS工具支撑InVEST模型 5.1ArcGIS数据形式与数据格式、数据格式之间的相互转换…...

LinuxShell编程

Shell编程 Shell的概念介绍 命令解释器 Shell是命令解释器(command interpreter)&#xff0c;是Unix操作系统的用户接口&#xff0c;程序从用户接口得到输入信息&#xff0c;shell将用户程序及其输入翻译成操作系统内核&#xff08;kernel&#xff09;能够识别的指令&#x…...

stm32学习笔记-11 SPI通信

11 SPI通信 文章目录 11 SPI通信11.1 SPI通信协议11.2 W25Q64简介11.3 实验&#xff1a;软件SPI读写W25Q6411.4 SPI通信外设11.5 实验&#xff1a;硬件SPI读写W25Q64 注&#xff1a;笔记主要参考B站 江科大自化协 教学视频“ STM32入门教程-2023持续更新中”。 注&#xff1a…...

“微商城”项目(3页面布局)

1.设置标题 设置页面头部标题&#xff0c;方便告诉用户当前显示的是哪一个页面。编辑src\router.js文件&#xff0c;示例代码如下。 routes: [{ path: /, redirect: /home, meta: { title: 首页 } },{ path: /home, component: Home, name: home, meta: { title: 首页 } } ] …...

Java 八股文 - MySQL

MySQL 1. MySQL 有几种锁&#xff1f; ​ 三种锁的特点 表级锁&#xff1a;开销小&#xff0c;加锁快&#xff1b;不会出现死锁&#xff1b;锁定颗粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。行级锁&#xff1a;开销大&#xff0c;加锁慢&#xff1b;会…...

周赛347(模拟、思维题、动态规划+优化)

文章目录 周赛347[2710. 移除字符串中的尾随零](https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/)模拟 [2711. 对角线上不同值的数量差](https://leetcode.cn/problems/difference-of-number-of-distinct-values-on-diagonals/)模拟 [2712. 使所有字符相等…...

String AOP的使用

面向切面编程&#xff0c;面向特定方法编程&#xff0c;以方法为对象&#xff0c;在不修改原方法的基础上&#xff0c;对方法进行操作扩展等&#xff0c;底层是通过动态代理实现的 使用开发步骤&#xff1a; 1、创建一个类&#xff0c;加上Aspect声明为一个AOP切面类&#xff…...

华为芯片基地旁,龙华科技小镇大水坑片区城市更新单元旧改项目

项目位置&#xff1a;龙华观澜大水坑社区&#xff0c;位于梅观创新走廊九龙山产学研片区内 占地面积&#xff1a;总面积198万平方米&#xff0c;其中项目第一期60万平米开 发 商&#xff1a; 华润集团申报主体&#xff1a;华润置地项目&#xff1a;龙华科技小镇大水坑片区城市…...

论文阅读 | 频谱监测、认知电子战、网电攻击

文章目录 1.《超短波信号的频谱监测与信号源定位》1.1 信号预处理技术1.2 对指定频段的宽带信号截获、分析以及频率分选研究1.3 对指定频段的信号进行最佳分频段扫描分析并还原原信号1.4 总结2.《认知电子战理论及关键技术研究》2.1 认知电子战发展现状2.2 认知电子战发展趋势分…...

MySQL server安装记录

1 安装Notepad 运行下载的 npp.7.9.Installer.x64.exe 2 安装MySQL 将mysql-8.0.22-winx64.zip解压缩&#xff0c;我将其放置D盘根目录下。 进入文件夹&#xff0c;在目录中新建文件夹data和文件my.ini 用NotePad打开my.ini&#xff0c;输入以下内容并保存&#xff0c;其中目…...

平衡树原理讲解

平衡树——Treap 文章目录 平衡树——TreapBST定义性质操作插入insert(o, v)删除del(o, v)找前驱 / 后继get_prev(o)、get_next(o)查找最大 / 最小值get_min(o)、get_max(o)求元素排名get_rank(o)查找排名为 k k k的元素get_value_by_rank 平衡树左旋、右旋zag(o)、zig(o)左旋右…...

SpringMVC框架面试专题(初级-中级)-第七节

欢迎大家一起探讨&#xff5e;如果可以帮到大家请为我点赞关注哦&#xff5e;后续会持续更新 问题&#xff1a; 1.Spring MVC框架中的注解是什么&#xff1f;请举例说明如何使用注解。 解析&#xff1a; Spring MVC是一个基于MVC&#xff08;Model-View-Controller&#xf…...

爬虫实战案例

预计更新 一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 …...

ConcurrentLinkedQueue非阻塞无界链表队列

ConcurrentLinkedQueue非阻塞无界链表队列 ConcurrentLinkedQueue是一个线程安全的队列&#xff0c;基于链表结构实现&#xff0c;是一个无界队列&#xff0c;理论上来说队列的长度可以无限扩大。 与其他队列相同&#xff0c;ConcurrentLinkedQueue 也采用的是先进先出&#…...

排序算法稳定性

稳定性&#xff1a; 用一句话总结排序算法的稳定性就是&#xff1a;同样的值&#xff0c;在排完序之后改不改变相对次序。 举例&#xff1a;arr[] {3,2,1,2,1,3}&#xff0c;数组中共有1、2 、3各2个数&#xff0c;排完序之后arr1[] {1,1,2,2,3,3}。稳定性是指排完序之后&…...

统计学期末复习整理

统计学&#xff1a;描述统计学和推断统计学。计量尺度&#xff1a;定类尺度、定序尺度、定距尺度、定比尺度。 描述统计中的测度&#xff1a; 1.数据分布的集中趋势 2.数据分布的离散程度 3.数据分布的形状。 离散系数 也称为标准差系数&#xff0c;通常是用一组数据的标准差与…...

Sketch在线版免费使用,Windows也能用的Sketch!

Sketch 的最大缺点是它对 Windows/PC 用户不友好。它是一款 Mac 工具&#xff0c;无法在浏览器中运行。此外&#xff0c;使用 Sketch 需要安装其他插件才能获得更多响应式设计工具。然而&#xff0c;现在有了 Sketch 网页版工具即时设计替代即时设计&#xff01; 即时设计几乎…...

实战工业测控:基于快马AI生成LabVIEW与数据库、Web集成的监控系统

今天想和大家分享一个最近用LabVIEW实现的工业测控项目实战经验。这个项目是为某制造车间设计的生产线监控系统&#xff0c;主要实现了设备数据采集、存储和可视化展示的全流程。下面我会分步骤详细介绍实现过程。 数据采集模块设计 这个环节需要实时获取产线上多个设备的运行…...

基于Ascend 950的Cube编程

直播回放链接&#xff1a;基于下一代硬件的Cube编程_哔哩哔哩_bilibili...

计算机毕业设计:汽车销售数据采集分析系统 Flask框架 requests爬虫 可视化 数据分析 大数据 机器学习 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…...

从零到一:51单片机数字电子时钟的DIY全流程解析

1. 项目背景与准备 数字电子时钟是单片机入门最经典的练手项目之一。我第一次接触51单片机时&#xff0c;也是从做一个电子时钟开始的。这个项目涵盖了定时器中断、数码管显示、按键扫描、蜂鸣器驱动等核心知识点&#xff0c;而且最终能看到实物运行&#xff0c;成就感直接拉满…...

Memos笔记数据安全吗?手把手教你配置自动备份到GitHub/对象存储(防丢指南)

Memos数据安全全攻略&#xff1a;从本地备份到云端同步的完整方案 Memos作为一款轻量级开源笔记工具&#xff0c;凭借其简洁界面和本地存储特性赢得了不少用户青睐。但数据安全始终是悬在每位用户心头的一把剑——服务器宕机、硬盘损坏、误操作删除都可能让珍贵笔记瞬间消失。本…...

从查表到公式:PT100温度转换的两种实现(附STM32+MAX31865完整代码)

从查表到公式&#xff1a;PT100温度转换的两种实现&#xff08;附STM32MAX31865完整代码&#xff09; 在工业测量和精密温度控制领域&#xff0c;PT100铂电阻因其出色的稳定性和线性度成为温度传感的首选。当工程师通过MAX31865芯片获取到PT100的电阻值后&#xff0c;如何高效准…...

从温控器到无人机:PID参数整定的‘手感’秘籍,附C语言代码避坑指南

从温控器到无人机&#xff1a;PID参数整定的‘手感’秘籍与实战避坑指南 在工业自动化和智能硬件开发中&#xff0c;PID控制算法就像一位隐形的调音师&#xff0c;默默调节着系统的每一个细微变化。无论是缓慢升温的工业烘箱&#xff0c;还是高速响应的四旋翼无人机&#xff0c…...

别再用手动执行SQL了!用SpringBoot + Flyway搞定多数据库(MySQL/Oracle/PostgreSQL)的自动化部署

SpringBoot Flyway&#xff1a;多数据库自动化部署的终极解决方案 当你的产品需要同时支持MySQL、Oracle和PostgreSQL三种数据库时&#xff0c;最头疼的问题是什么&#xff1f;是每次部署都要手动执行不同的SQL脚本&#xff0c;还是担心不同环境下数据库结构不一致导致的诡异b…...

iperf3网络性能测试工具完全指南:从安装到企业级应用

iperf3网络性能测试工具完全指南&#xff1a;从安装到企业级应用 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 在当今数字化时代&#xff0c;网络…...

Ubuntu 22.04下用mingw-w64交叉编译Windows程序的完整指南(附CMake配置)

Ubuntu 22.04下用mingw-w64交叉编译Windows程序的完整指南&#xff08;附CMake配置&#xff09; 在跨平台开发领域&#xff0c;能够从Linux系统生成Windows可执行文件是一项极具实用价值的技能。对于使用Ubuntu 22.04 LTS的开发者来说&#xff0c;mingw-w64工具链提供了稳定高…...