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

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

查找一个点集的凸包。
函数 cv::convexHull 使用斯克拉斯基算法(Sklansky’s algorithm)来查找一个二维点集的凸包,在当前实现中该算法的时间复杂度为 O(N logN)。

函数 cv::convexHull 是 OpenCV 库中的一个功能,用于计算一组二维点的凸包。凸包可以理解为是最小的凸多边形,它能够包含给定的所有点。这个函数利用了Sklansky算法或其他高效算法来完成计算,其时间复杂度在当前实现中为 O(N logN),其中 N 是输入点的数量。

函数原型


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

参数

  • 参数points Input 2D point set, stored in std::vector or Mat.
  • 参数hull 输出的凸包。它可以是一个整数向量的索引或者是点的向量。在第一种情况下,凸包元素是以0为基础的索引,在原始数组中的凸包点(因为凸包点集是原始点集中的一子集)。在第二种情况下,凸包元素本身就是凸包的点。
  • 参数clockwise 方向标志。如果为真,则输出的凸包是按照顺时针方向排列的。否则,它是按照逆时针方向排列的。假设的坐标系统X轴指向右侧,Y轴向上。
  • 参数returnPoints 操作标志。在矩阵的情况下,当此标志为真时,函数返回凸包的点。否则,它返回凸包点的索引。当输出数组是 std::vector 时,此标志被忽略,输出取决于向量的类型:std::vector 表示 returnPoints=false,std::vector 表示 returnPoints=true。

代码示例

include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>using namespace std;
using namespace cv;int main() {// 创建一个随机点集vector<Point2f> points;for (int i = 0; i < 10; ++i) {points.push_back(Point2f(rand() % 500, rand() % 500));}// 计算凸包vector<vector<Point2f>> hulls;vector<int> hullIndices;convexHull(points, hullIndices, false);// 将索引转换为实际的点for (auto& index : hullIndices) {hulls.push_back(vector<Point2f>{points[index]});}// 创建一个空白图像来显示点和凸包Mat img = Mat::zeros(512, 512, CV_8UC3);// 绘制原始点for (const auto& pt : points) {circle(img, pt, 3, Scalar(0, 0, 255), -1); // 红色圆圈表示原始点}imshow("circle image", img);// 绘制凸包int numPoints = hulls.size();for (int i = 0; i < numPoints; ++i) {line(img, hulls[i][0], hulls[(i + 1) % numPoints][0], Scalar(0, 255, 0), 2); // 绿色线条表示凸包}// 显示结果imshow("Convex Hull", img);waitKey(0);return 0;
}

运行结果

在这里插入图片描述

相关文章:

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法&#xff08;Sklansky’s algorithm&#xff09;来查找一个二维点集的凸包&#…...

灰光模块,彩光模块-介绍

1. 引用 知识分享系列一&#xff1a;5G基础知识-CSDN博客 5G前传的最新进展-CSDN博客 灰光和彩光_通信行业5G招标系列点评之二&#xff1a;一文读懂5G前传-光纤、灰光、彩光、CWDM、LWDM、MWDM...-CSDN博客 ADOP带你了解&#xff1a;CWDM、DWDM、MWDM、LWDM&#xff1a;快速…...

python-新冠病毒

题目描述 假设我们掌握了特定时间段内特定城市的新冠病毒感染病例的信息。在排名 i 的当天有 i 个案例&#xff0c;即&#xff1a; 第一天有一例感染第二天有两例感染第三天有三例感染以此类推...... 请计算 n 天内的感染总数和每天平均感染数。 输入 整数 n 表示天数&…...

2023年408真题计算机网络篇

https://zhuanlan.zhihu.com/p/6954228062023年网络规划设计师上午真题解析TCP流量计算_哔哩哔哩_bilibili 1 1在下图所示的分组交换网络中&#xff0c;主机H1和H2通过路由器互联&#xff0c;2段链路的数据传输速率为100 Mb/s、时延带宽积 &#xff08;即单向传播时延带宽&am…...

分类学习器(Classification Learner App)MATLAB

在MATLAB中&#xff0c;分类学习器用于构建和评估分类模型。MATLAB提供了一些工具和功能&#xff0c;帮助你进行分类任务&#xff0c;例如分类学习器应用程序、统计和机器学习工具箱中的函数等。 数据集介绍 不同的人被要求在平板电脑上写字母"J"、“V"和&quo…...

DolphinDB 基准性能测试工具:金融模拟数据生成模块合集

测试 DolphinDB 数据库性能时&#xff0c;往往需要快速写入一些测试数据。为方便用户快速完成简单的基准性能测试&#xff0c;金融 Mock 数据生成模块覆盖了常用的金融数据集&#xff0c;满足用户生成模拟数据的需求。基于本模块生成的模拟数据不具有实际意义&#xff0c;建议仅…...

BUUCTF—[BJDCTF2020]The mystery of ip

题解 打开环境点击上面的flag可以看到这个IP页面。 抓个包看看有啥东西无&#xff0c;可以看到在返回包有IP。 看到IP就想到X-Forwarded-For这个玩意&#xff0c;我们用X-Forwarded-For随便添加个IP看看。可以看到返回的IP内容变成了123。 X-Forwarded-For:123 推测它会输出我…...

leecode100题-双指针-三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 答案中不可以包含重复的三元组。 示例 1&#xff1a; 输入…...

计算机毕业设计PySpark+Django考研分数线预测 考研院校推荐系统 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习 深度学习

《PySparkDjango考研分数线预测与推荐系统》开题报告 一、研究背景与意义 随着教育水平的提高和就业竞争的加剧&#xff0c;越来越多的学生选择继续深造&#xff0c;参加研究生入学考试&#xff08;考研&#xff09;。然而&#xff0c;考研信息繁杂&#xff0c;选择专业和院校…...

Go语言多态实践以及gin框架c.BindJSON序列化遇到的坑

遇到的问题 如果定义的接收结构体字段是interface{}&#xff0c;在调用gin的 c.BindJSON 方法后会直接转为map&#xff0c; 导致无法断言为其他类型 场景 在创建工程请求中&#xff0c;根据工程类别的不同会有多种创建参数&#xff0c;比如 // A 类型需要编译 所以有这些字…...

SpringCloud神领物流学习笔记:项目概述(一)

SpringCloud神领物流学习笔记&#xff1a;项目概述&#xff08;一&#xff09; 文章目录 SpringCloud神领物流学习笔记&#xff1a;项目概述&#xff08;一&#xff09;1、项目介绍2、基本业务流程3、系统架构4、技术架构 1、项目介绍 ​ 神领物流是一个基于微服务架构体系的【…...

RocketMQ异步报错:No route info of this topic

在SpringBoot中发送RocketMQ异步消息的时候报错了&#xff0c;提示org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, testTopic1 这里给出具体的解决方案 一、Broker模块不支持自动创建topic&#xff0c;并且topic没有被手动创建过 R…...

Node.js学习记录(一)

目录 一、文件读取 readFile 二、写入文件 writeFile 三、动态路径 __dirname&#xff1a;表示当前文件所处的目录、path.join 四、获取路径文件名 path.basename 五、提取某文件中的css、JS、html 六、http 七、启动创建web服务器 服务器响应 八、将资源请求的 url 地…...

【AI】Pytorch_模型构建

建议点赞收藏关注&#xff01;持续更新至pytorch大部分内容更完。 本文已达到10w字&#xff0c;故按模块拆开&#xff0c;详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 模型线性回归逻辑回归LeNetAlexNet 构建模块组织复杂网络初始化网络…...

FFmpeg源码:avcodec_descriptor_get函数分析

一、avcodec_descriptor_get函数的声明 avcodec_descriptor_get函数声明在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为7.0.1&#xff09;的头文件libavcodec/codec_desc.h中&#xff1a; /*** return descriptor for given codec ID or NULL if no descriptor exist…...

为数据仓库构建Zero-ETL无缝集成数据分析方案(下篇)

对于从事数据分析的小伙伴们来说&#xff0c;最头疼的莫过于数据处理的阶段。在我们将数据源的原始数据导入数据仓储进行分析之前&#xff0c;我们通常需要进行ETL流程对数据格式进行统一转换&#xff0c;这个流程需要分配专业数据工程师基于业务情况完成&#xff0c;整个过程十…...

ElMessageBox消息确认框组件在使用时如何设置第三个或多个自定义按钮

ElMessageBox自带两个按钮一个确认一个取消&#xff0c;当还想使用该组件还想再加个功能组件时,就需要自定义个按钮加到组件里 第二种方法可以通过编写自定义弹窗来完成,个人觉得代码量增多过于繁琐,当然也可以实现 先定义方法负责获取dom父节点&#xff0c;创建新的子元素加…...

javaWeb【day04】--(MavenSpringBootWeb入门)

01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后&#xff0c;我们即将开始学习后端Web开发技术。做为一名Java开发工程师&#xff0c;后端Web开发技术是我们学习的重点。 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于…...

[Linux]:文件(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 重定向原理 在明确了文件描述符的概念及其分配规则后&#xff0c;我们就可…...

【学习笔记】手写Tomcat 一

目录 HTTP协议请求格式 HTTP协议响应格式 Socket 解读代码 服务端优化 解读代码 作业 1. 响应一个 HTML 页面给客户端&#xff0c;游览器把接收到的内容进行渲染 2. 文件的媒体类型是写死的&#xff0c;肯定不行&#xff0c;怎么变成动态&#xff1f; 昨天作业答案 …...

OpenClaw隐私保护:GLM-4.7-Flash本地处理敏感数据的实践方案

OpenClaw隐私保护&#xff1a;GLM-4.7-Flash本地处理敏感数据的实践方案 1. 为什么需要本地化AI处理敏感数据&#xff1f; 去年我在处理公司财务报告自动化时遇到一个棘手问题&#xff1a;使用云端AI服务需要上传包含客户隐私的Excel文件到第三方服务器。尽管服务商承诺数据安…...

2023最新版Prometheus+Grafana监控系统搭建指南(含Docker-compose部署)

2023云原生监控实战&#xff1a;基于Docker-compose的PrometheusGrafana全栈部署指南 在云原生技术席卷各行各业的今天&#xff0c;监控系统已成为保障业务稳定性的神经中枢。传统监控方案在面对容器化、微服务架构时往往力不从心&#xff0c;而Prometheus作为CNCF毕业项目&…...

EVA-01保姆级教程:Qwen2.5-VL-7B多模态大模型在EVA-01中的本地化安全部署

EVA-01保姆级教程&#xff1a;Qwen2.5-VL-7B多模态大模型在EVA-01中的本地化安全部署 1. 引言&#xff1a;欢迎来到NERV指挥中心 想象一下&#xff0c;你面前有一个能看懂图片、理解图表、甚至能和你讨论图片里发生了什么的智能助手。现在&#xff0c;我们把这个助手装进了一…...

Ice:macOS菜单栏管理终极指南,彻底告别杂乱无章

Ice&#xff1a;macOS菜单栏管理终极指南&#xff0c;彻底告别杂乱无章 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 想要彻底掌控macOS菜单栏&#xff0c;告别杂乱无章的图标堆积吗&#xff1f;I…...

基于cartographer算法的自主导航系统仿真设计 移动机器人系统具备定位、建图及路径规划功能

基于cartographer算法的自主导航系统仿真设计 移动机器人系统具备定位、建图及路径规划功能&#xff0c;在迷宫式的环境中建模导航。 模型以及移动机器人模型&#xff0c;移动机器人模型包含2D激光雷达传感器、轮式里程计以及惯性导航原件 基于cartographer算法建图&#xff0c…...

Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案

Html2Pdf高性能转换引擎&#xff1a;PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案 【免费下载链接】html2pdf OFFICIAL PROJECT | HTML to PDF converter written in PHP 项目地址: https://gitcode.com/gh_mirrors/ht/html2pdf 在当今企业数字化转型浪潮中&#xf…...

揭秘联发科设备Bootloader解锁:mtkclient-gui实战指南与深度解析

揭秘联发科设备Bootloader解锁&#xff1a;mtkclient-gui实战指南与深度解析 【免费下载链接】mtkclient-gui GUI tool for unlocking bootloader and bypassing authorization on Mediatek devices (Not maintained anymore) 项目地址: https://gitcode.com/gh_mirrors/mt/m…...

从Excel到Python:数据分析师必学的对数坐标绘制技巧(含Seaborn美化)

从Excel到Python&#xff1a;数据分析师必学的对数坐标绘制技巧&#xff08;含Seaborn美化&#xff09; 当市场报告中的用户增长曲线从缓慢爬升突然变成陡峭上升&#xff0c;或是竞品分析中的订单量横跨三个数量级时&#xff0c;Excel的默认线性坐标往往会让图表失去可读性。对…...

Linux性能调优实战:CPU与内存优化指南

Linux 性能调优实战指南1. 性能优化基础概念1.1 性能指标Linux性能优化的两个核心指标是吞吐量和延迟。从应用负载角度看&#xff0c;直接影响终端用户体验&#xff1b;从系统资源角度看&#xff0c;关注资源使用率和饱和度。性能问题的本质是系统资源已达瓶颈但请求处理不够快…...

DevExpress GridControl动态添加行的两种高效实现方式

1. 两种动态添加行的核心方法对比 刚接触DevExpress GridControl时&#xff0c;最让我头疼的就是动态添加行这个基础操作。网上教程要么太零散&#xff0c;要么直接贴代码不解释原理。经过多个项目实战&#xff0c;我总结出最高效的两种实现方式&#xff0c;就像给表格数据&quo…...