OpenCV结构分析与形状描述符(9)检测轮廓相对于其凸包的凹陷缺陷函数convexityDefects()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
查找一个轮廓的凸性缺陷。
下图显示了一个手部轮廓的凸性缺陷:

convexityDefects 是 OpenCV 库中的一个函数,用于检测轮廓相对于其凸包的凹陷缺陷。这个函数可以帮助识别轮廓中的凹进去的部分,通常被用来分析手部或其他物体的形状特征。
函数原型
void cv::convexityDefects
(InputArray contour,InputArray convexhull,OutputArray convexityDefects
)
参数
- 参数contour 输入的轮廓。
- 参数convexhull 使用 convexHull 获得的凸包,应包含构成凸包的轮廓点的索引。
- 参数convexityDefects 凸性缺陷的输出向量。在 C++ 和新的 Python/Java 接口中,每个凸性缺陷表示为一个四元素整数向量(即 Vec4i):(start_index, end_index, farthest_pt_index, fixpt_depth),其中索引是原始轮廓中凸性缺陷起始点、终点和最远点的 0 基础索引,而 fixpt_depth 是最远轮廓点与凸包之间距离的定点近似值(带有 8 位小数部分)。也就是说,要获得深度的浮点数值,需要将 fixpt_depth 除以 256.0。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{// 加载一张图像Mat img = imread( "/media/dingxin/data/study/OpenCV/sources/images/hand2.png", IMREAD_GRAYSCALE );if ( img.empty() ){cerr << "Error: Image not found." << endl;return -1;}// 二值化处理Mat binImg;threshold( img, binImg, 48, 255, THRESH_BINARY_INV );//imshow( "er zhi", binImg );// 寻找轮廓vector< vector< Point > > contours;findContours( binImg, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE );// 假设我们只处理第一个最大的轮廓vector< Point > contour = contours[ 0 ];// 计算凸包vector< int > hull;convexHull( contour, hull );// 计算凹陷缺陷vector< Vec4i > defects;convexityDefects( contour, hull, defects );// 在原图上绘制凸包和凹陷缺陷Mat drawing = Mat::zeros( img.size(), CV_8UC3 );drawContours( drawing, contours, 0, Scalar( 255, 0, 0 ), 2 ); // 绘制轮廓//imshow( "Convexity ", drawing );// 绘制凹陷缺陷for ( size_t i = 0; i < defects.size(); i++ ){Vec4i defect = defects[ i ];Point start = contour[ defect[ 0 ] ];Point end = contour[ defect[ 1 ] ];Point farthest = contour[ defect[ 2 ] ];line( drawing, start, end, Scalar( 0, 255, 0 ), 1 ); // 绘制凹陷缺陷的边缘circle( drawing, farthest, 5, Scalar( 0, 0, 255 ), -1 ); // 绘制凹陷缺陷的最远点}// 显示结果imshow( "Original image", img );imshow( "Convexity Defects", drawing );waitKey( 0 );return 0;
}
运行结果

相关文章:
OpenCV结构分析与形状描述符(9)检测轮廓相对于其凸包的凹陷缺陷函数convexityDefects()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 查找一个轮廓的凸性缺陷。 下图显示了一个手部轮廓的凸性缺陷: convexityDefects 是 OpenCV 库中的一个函数,用于检测轮…...
HTTP 之 响应头信息(二十三)
应答头说明Allow服务器支持哪些请求方法(如GET、POST等)。Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutp…...
智能风扇的全新升级:NRK3603语音芯片识别控制模块的应用
在当今智能化生活的潮流中,如何让家电更加人性化、便捷化,已经成为消费者和制造商关注的焦点。在这股大潮中,NRK3603语音识别模块以其出色的性能和广泛的应用,为智能电风扇带来了全新的升级。 1. 芯片特性 NRK3603是一款高性能、…...
如何通过pSLC技术实现性能与容量的双赢
目录 一、什么是 pSLC 二、各 NAND FLASH 的特点 三、pSLC 的优缺点 四、应用场景 一、什么是 pSLC pSLC(Pseudo-Single Level Cell)即伪 SLC,是一种将 MLC/TLC 改为 SLC 的一种技术,现 Nand Flash 基本支持此功能࿰…...
减速电机的基本结构及用料简介
资料来源:淘宝上某商家,它提供功率极小的电机。比如5W 1.整体结构剖面图 如下图,左侧是减速箱,和动力输出轴,右侧可以看到定子的铜丝绕组和中间的转子,它们贴合地非常紧密。气隙很窄。它的转子很像是铝制…...
1688跨境电商接口开放接入,跨境电商的尽头到底谁在赚钱?
1688(阿里巴巴)作为国内甚至全世界最大的线上批发集采平台,一直以来都是大部分跨境卖家选品和开发的主要平台之一,也保持着良好的上下游供应链关系。 不过,就在近日,1688正式推出跨境寻源通计划,…...
SpringBoot 增量部署发布
一、背景介绍 由于项目依赖的jar越来越多,Springboot默认的打包方式是将整个项目打包成一个jar包,每次发布时,打包后的jar越来越大,更新一个很小的功能,需要将整个jar上传运行。这样效率太低了,考虑实现每…...
java八股!1
集合 目录 集合java中存在哪些集合?底层实现逻辑?哪些集合是线程安全的?集合的对比:hash冲突如何解决hashmap为什么线程不安全,如何实现安全?hashmap中循环链表的产生hashmap底层实现原理和扩容机制map的遍…...
【学术会议征稿】2024年智能驾驶与智慧交通国际学术会议(IDST 2024)
2024年智能驾驶与智慧交通国际学术会议(IDST 2024) 2024 International Conference on Intelligent Driving and Smart Transportation 智能驾驶和智慧交通利用新兴技术,使城市出行更加方便、更具成本效益且更安全。在此背景下,由中南大学主办的2024年…...
2024最全网络安全工程师面试题(附答案)
🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 2024年过去了一大半,先来灵魂三连问,年初定的目标完成多少了?薪资涨了吗?女朋友找到了吗? 一、网络…...
828华为云征文| 华为云 Flexus X 实例:引领云计算新时代的柔性算力先锋
828华为云征文| 华为云 Flexus X 实例:引领云计算新时代的柔性算力先锋 1. 推出背景 在数字经济快速发展的当下,数字化转型已成为企业发展的必然趋势。然而,中小企业在数字化转型过程中面临着诸多困境。据《2024 年中小企业数字化转型白皮书…...
何时何地,你需要提示工程、函数调用、RAG还是微调大模型?
介绍 在快速发展的生成式人工智能领域,某些流行术语已变得司空见惯:“提示工程”、“函数调用”、“RAG”和“微调”,你应该也经常遇到这些术语,但你是否能够理清这些概念之间的关系?这些其实都是一些大模型的应用策略…...
three.js线框模式
背景 设计师希望弄一个模型的这个效果: 但是,我使用three.js提供的EdgesGeometry死活只能做到下面这种: 后来才知道three.js只支持画三角面,四边形面并不支持,这是由更底层的webGL决定的。 但是在查找资料的过程中&…...
VScode 的简单使用
目录 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 也可以“ CTRLD ”;使用“CTRL滚轮”即可; ctrl /-,是用来展开/收起代码的; 比如:js 的多行注释是 shiftalt…...
五星级可视化页面(07):城市交通方向,城市畅通的保障。
城市交通方面的可视化大屏,一方面用户可以通过五星级可视化页面快速了解城市交通方向,实时掌握交通状况,选择最佳出行方案,提高出行效率,另一方面也有助于城市交通管理部门进行交通流量调度和管理。 本期发布一些经典…...
贪心+构造,1924A - Did We Get Everything Covered?
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1924A - Did We Get Everything Covered? 二、解题报告 1、思路分析 我…...
麦汁煮沸工艺
麦汁煮沸是啤酒酿造中至关重要的工艺环节之一,直接影响啤酒的风味。今天,天泰邀您一起深入探讨这一关键的酿造技术。 煮沸麦汁 在煮沸麦汁时,时间和温度控制至关重要。通常,麦汁煮沸持续 40 到 50 分钟,具体时间取决于…...
企业级WEB应用服务器---TOMACT
一、WEB技术介绍 1.1 Http和B/S结构 操作系统一般都有子进程系统,使用多进程就可以充分利用硬件资源,提高效率。在前面的学习中我们了解到进程中可以有多个线程,且每一个线程都可以被CPU调度执行,这样就可以让程序并行执行。一台…...
前端:JavaScript中的this
前端:JavaScript中的this 1. this的指向2. 指定this的值3. 手写call方法4. 手写apply方法5. 手写bind方法 1. this的指向 在非严格模式下,总是指向一个对象;在严格模式下可以是任意值。 开启严格模式,如果是为整个脚本开启&#…...
Zynq7020 SDK 初学篇(5)- 中断
1.开发背景 基于上一个篇章 GPIO 使用,引入中断的使用。 2.开发需求 PS 和 PL 按键输入中断,并输出对应的日志打印 3.开发环境 Zynq7020 Vivado2017.4 4.实现步骤 4.1 设计配置 PL Key0 56 PS key0 12 PS key1 11 4.2 代码编写 GPIO 配置 #if…...
Ender-3固件配置终极指南:5步简单快速性能优化
Ender-3固件配置终极指南:5步简单快速性能优化 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3固件配置是解锁3D打印机…...
Sora 2批量视频生成工作流深度拆解(企业级高并发视频生产系统架构图首次公开)
更多请点击: https://codechina.net 第一章:Sora 2批量视频生成工作流全景概览 Sora 2作为新一代大规模视频生成模型,其批量处理能力已深度集成于可编程工作流中,支持从提示工程、参数调度、分片渲染到后处理导出的端到端自动化…...
USB扩展坞
usb中引脚含意DP表示USB的差分信号线正极DM表示USB的差分信号线负极差分对布线:大于设置的距离,使用等长调节每一个晶振都要放置...
肺部X光AI诊断系统:五分类模型实战与临床可解释性
1. 项目概述:当X光片遇上深度学习——一个肺部疾病AI诊断系统的实操手记 我做医疗影像AI项目快七年了,从最早在医院信息科帮放射科老师写脚本批量重命名DICOM文件,到后来带着学生团队在基层医院部署轻量级肺炎筛查工具,踩过的坑比…...
Waymo自动驾驶出租车频入洪水区,亚特兰大服务暂停!
TechCrunch导航栏TechCrunch有桌面端和移动端标志。网站有最新资讯、初创公司、风险投资、苹果、安全、人工智能、应用程序等分类,还有活动、播客、时事通讯等内容,具备搜索和巨型菜单切换功能。主题涉及最新资讯、人工智能、亚马逊等众多方面࿰…...
N_m3u8DL-CLI-SimpleG:高效M3U8视频下载的性能优化实战指南
N_m3u8DL-CLI-SimpleG:高效M3U8视频下载的性能优化实战指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 在流媒体内容日益丰富的今天,M3U8视频下载已成…...
技术选型指南:Pentaho Data Integration 11.x企业级数据集成架构深度解析
技术选型指南:Pentaho Data Integration 11.x企业级数据集成架构深度解析 【免费下载链接】pentaho-kettle Pentaho Data Integration ( ETL ) a.k.a Kettle 项目地址: https://gitcode.com/gh_mirrors/pe/pentaho-kettle Pentaho Data Integrationÿ…...
Claude Code、Cursor、Codex到底是什么?法律人AI开发工具全解析
一、AI IDE是什么?从代码编辑器到智能助理AI IDE AI 集成开发环境(IDE)。传统IDE如VS Code、IntelliJ,开发者需要手动编写每一行代码、查阅文档、编写测试用例。AI IDE则让开发者用自然语言下达指令,AI理解整个项目结…...
如果你还在为CAD、SolidWorks的许可发愁,看看这八家
先讲个真事。上个月我一个老同事打电话来,他们公司做非标自动化,四十几个机械工程师,用的主要是SolidWorks和AutoCAD。他说每年买浮动许可的钱快三百万了,结果研发那边还是天天有人排队等许可。他去看了一眼,下午两点半…...
百度网盘限速破解终极指南:macOS用户免费解锁SVIP高速下载
百度网盘限速破解终极指南:macOS用户免费解锁SVIP高速下载 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘在macOS上的蜗牛下…...
