30-凸包(Convex Hull)

article/2025/7/5 9:03:12

文章目录

  • 凸包(convex hull)
    • 凸包(convex hull)
    • Graham扫描算法
    • API
    • 使用步骤:
    • Code
    • 效果

凸包(convex hull)

1、凸包概念;
2、API说明;
3、代码演示;
convex : 凸面的,凸出的,凸多变形的;
hull : 物体外壳;

凸包(convex hull)

1、凸包(convex hull):在一个多边形边缘或者内部任意两个点的连线都包含在多边形边界或者内部,正式定义为:包含点集合S中所有点的最小凸多边形称为凸包;

在这里插入图片描述
凸包和非凸包:
在这里插入图片描述

2、凸包是建立在轮廓提取的基础上,OpenCV中提供了2种凸包的实现算法,最常用的为:Graham扫描法;

Graham扫描算法

1、原理:
在这里插入图片描述
在这里插入图片描述
demo : 从Y方向最低点p0开始寻找,C点导致与下一点D的连线右转向,所以舍弃该点;

在这里插入图片描述

API

1、凸包API : convexHull()
参数:
points : 输入为轮廓检测发现的点
hull : 凸包;对于hull参数可以为std::vector,这是返回的是凸包点在原轮廓点集中的索引,当为std::vectorcv::Point时,表示的是凸包点的位置
clockwise : 默认为true , 顺时针方向扫描
returnPoints : 返回凸包点的个数,如果hull输入为vector<Point>向量,则自动忽略该值;
在这里插入图片描述

2、凸包是一种特殊的轮廓,OpenCV提供了快速进行图像开发的框架;l

使用步骤:

  1. 将图像从RGB图像转换为灰度图像;
  2. 再转换为二值图像(Canny边缘检测或者阈值处理转换为二值图像);
  3. 再通过发现轮廓找到候选点;
  4. 调用凸包API;
  5. 绘制显示;

Code

调试:设置断点,F10执行下一条语句;

#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;Mat src,src_gray, dst;
int threshold_value = 100;
int threshold_max = 255;RNG rng(12345);  //定义一个随机数变量const char *OUTPUT_WIN = "convex hull image";
const char *INPUT_WIN = "input image";void Convexhull_Demo(int, void*);int main(int argc, char** argv)
{src = imread("C:\\Users\\hello\\Desktop\\37.jpg");if (src.empty()){cout << "could not load the image..." << endl;return -1;}namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);cvtColor(src, src_gray, CV_BGR2GRAY);  //转换为灰度图像//GaussianBlur(src_gray, src_gray, Size(3, 3), 0, 0);  //滤波处理blur(src_gray, src_gray, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);imshow(INPUT_WIN, src);createTrackbar("Threshold value:", INPUT_WIN, &threshold_value, threshold_max, Convexhull_Demo);Convexhull_Demo(0, 0);waitKey(0);return 0;
}void Convexhull_Demo(int, void*)
{//进行发现凸包操作Mat binImage;threshold(src_gray, binImage, threshold_value, threshold_max, THRESH_BINARY);  //转换为二值图像vector<vector<Point>> contours;  //存放发现的轮廓点vector<Vec4i> hierarchy;   //hierarchy : 层次//发现轮廓findContours(binImage, contours, hierarchy, RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE, Point(0, 0));//注意!!!! hull的声明必须放在findContours()API之后,这样contours才有计算值,不为空!!vector<vector<Point>> hull(contours.size());  //初始化与原始轮廓相同for (size_t i = 0; i < contours.size(); i++)  //从所有轮廓中寻找凸包{convexHull(contours[i],hull[i],false,true);//给的数组,true会自动忽略}//绘制轮廓dst = Mat::zeros(src.size(), CV_8UC3);  //初始化矩阵内容vector<Vec4i> empty(0);for (size_t k = 0; k < contours.size(); k++){Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));  //产生一个随机颜色drawContours(dst, contours, k, color, 2, LINE_8, hierarchy, 0, Point(0, 0));//绘制轮廓//绘制凸包  此时不能传入层次参数drawContours(dst, hull, k, color, 2, LINE_8, empty, 0, Point(0, 0));//绘制凸包}imshow(OUTPUT_WIN, dst);  //显示最终图像return;
}

效果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/wZCApGnG.shtml

相关文章

凸包(convex hull),凸包络面(convex envelope), 凸低估计量(convex underestimator), 图上方(epigraph),

凸分析中经常见到这些概念&#xff0c;目前这方面的中文资料似乎不太多&#xff0c;决定写篇博客总结一下。 文章目录 1. 凸包 convex hull2. 图上方 epigraph3. 凸低估计量 convex underestimator4. 凸包络面 convex envelope 1. 凸包 convex hull 凸包在文献中比较常见些&a…

凸包

一、引言 凸包&#xff08;Convex Hull&#xff09;是一个计算几何&#xff08;图形学&#xff09;中的概念。 在一个实数向量空间V中&#xff0c;对于给定集合X&#xff0c;所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1&#xff0c;...Xn)的凸组合来构造…

凸包, 概念

catalog 凸包算法1 O(n * m)算法2 O(n * logN) Andrew安德鲁算法凸包模板 凸包 通常上讲 平面上有很多的点, 用一个 皮筋 圈住 这所有的点, 此时这个 皮筋, 就是 这些点的 凸包 数学上讲 性质1: 凸包上, 任何一条边 他所在的直线 即为L, 则所有的点 都在直线L 的 同一侧 比…

小白兔视频格式转换器下载

1、小白兔视频格式转换器 www.xxxbbbttt.com 上传你的视频&#xff08;腾讯qlv&#xff0c;爱奇艺qsv、优酷kux&#xff09;都可以。 2、点击转换按钮&#xff0c;转换好后&#xff0c;我们把转换的视频下载到电脑里&#xff0c;就可以看到视频已经是MP4格式了。

推荐一款能够将爱奇艺qsv、腾讯qlv、优酷kux完美转换成mp4的三合一全能格式转换器

爱奇艺视频、腾讯视频、优酷视频相信很多人都在使用其中的一款或者几款软件吧&#xff0c;这三大视频网站已经主导国内视频行业&#xff0c;都是购买视频版权。因此&#xff0c;为了保护视频版权&#xff0c;就将缓存视频的格式设置成专属的qsv、qlv、kux&#xff0c;这三种视频…

kux格式怎么转换成mp4?简单快速的视频转换技巧分享

现在生活压力越来越大,过完一天忙碌的工作回到家里开始煲剧是很多人的最爱。说到看视频,资源基本都被「三巨头」——腾讯视频、爱奇艺、优酷所覆盖,而有些朋友喜欢将视频下载下来看。可是却发现,下载的视频格式是kux、qsv、qlv,普通视频播放器根本打不开,这是怎么一回事呢…

怎么使用视频转换器把kux格式转换mp4

在周末或者平时闲暇的时间&#xff0c;很多人可能就是在家里看下视频吧&#xff1f;而且最好的方式&#xff0c;还是下载到本地上来观看&#xff0c;想要啥时候看就啥时候看&#xff0c;想要看哪个地方的就看哪个地方的。但是吧&#xff0c;有人发现了&#xff0c;自己下载的视…

上网成瘾改变大脑结构:语言功能受影响,让人话都说不利索

万博 发自 凹非寺量子位 | 公众号 QbitAI 经常不受控制地拿着手机或平板&#xff0c;漫无目的的刷微博&#xff0c;逛淘宝…… 如果有&#xff0c;那就需要注意了&#xff0c;这种无法自控的上网成瘾&#xff0c;是一种被叫做互联网使用障碍&#xff08;IUD&#xff09;的健康问…

数据统计分析的16个基础概念

来源&#xff1a;EasyShu 本文约11000字&#xff0c;建议阅读20分钟本文介绍了数据统计分析的16个基本概念。 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法…

睡眠剥夺后皮层微结构的广泛变化

大脑皮层的微观结构受到昼夜节律和睡眠剥夺的影响&#xff0c;但这些影响的确切基础尚不清楚。t1加权和t2加权磁共振图像之间的比率(T1w/T2w比率)与髓磷脂水平和树突密度有关&#xff0c;这可能为研究睡眠剥夺大脑的皮质内微观结构提供新的见解。在这里&#xff0c;我们检测了4…

常用的数据分析方法汇总

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法…

论文阅读:FLGCNN: A novel fully convolutional neural network for end-to-endmonaural speech enhancement

论文题目&#xff1a;FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions 一种新颖的全卷积神经网络&#xff0c;用于具有基于话语的目标函数…

民安汇智量表科普!满意度调查量表怎么选?

满意度量表是进行满意度调查的主要工具和手段。目前的满意度量表因其适用的对象、范围和特点各异&#xff0c;存在着多种类型差异。每个量表都有自己的特点&#xff0c;没有一个量表能用于所有的客户满意度评价&#xff0c;哪怕是在同一期满意度调查&#xff0c;都会因地制宜&a…

一文介绍各种量表类型!

量表是一种测量工具&#xff0c;通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量&#xff0c;最常见到的就是李克特量表&#xff0c;关于量表还有很多的种类&#xff0c;这里具体介绍几种&#xff1a; 一. 李克特量表&#xff08;…

数据分析之数据预处理、分析建模、可视化

大纲 思维导图1. 数据分析概述1.1 简介1.2 发展历程1.3 应用领域1.4 开发流程 2. 数据类型2.1 结构化与非结构化数据2.2 定性与定量数据2.3 截面数据与时间序列数据 3. 数据来源4. 数据预处理方法4.1 数据清洗4.2 数据集成4.3 数据规约4.4 数据变换 5. 数据分析模型5.1 对比分析…

amos里CFA可行性辨别结果怎么看_论文用问卷调查法,数据分析怎么做?

论文问卷数据的分析,看起来简单,好像每个人都会做。但是做起来还真的有点难度。很多初次使用问卷调查方法的人大多以为,问卷数据分析嘛,无外乎对单选题做做频率分析,看看选择不同的选项的人占比有多少。对于评分题目,看看均值是多少,不同性别,年龄段的人群均值是多少。…

『统计学』常用的数据分析方法都在这了!Part.2

阿平 | 作者 知乎 | 来源 1 相关分析 研究现象之间是否存在某种依存关系&#xff0c;对具体有依存关系的现象探讨相关方向及相关程度。 单相关&#xff1a;两个因素之间的相关关系叫单相关&#xff0c;即研究时只涉及一个自变量和一个因变量复相关 &#xff1a;三个或三个以上因…

常用数据分析方法总结

最近优化一个画像产品&#xff0c;用到一些数据分析方法&#xff0c;这里总结一下。 主要参考&#xff1a;https://www.jianshu.com/p/809fb2261b23 &#xff0c;补充一些细节 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并…

阅读《Unsupervised Evaluation of Interactive Dialog with DialoGPT》

Unsupervised Evaluation of Interactive Dialog with DialoGPT 目录 Abstract 1 Introduction 2 Related Work 2.1 Automatic Dialog Evaluation 2.2 Dialog Qualities 2.3 Pre-trained Dialog Models 3 Data Collection 3.1 Turn-Level Annotation 3.2 Dialog-Level Annotati…

循证护理教育中的移动辅助同伴评估方法

摘要&#xff1a; 学习循证护理的学生可以帮助医疗保健团队做出适当的医疗决策&#xff0c;并为患者提供有价值的建议&#xff0c;从而优化特定情况下的患者护理质量。在临床工作中&#xff0c;护理人员通过搜索相关的经验性护理文献来参与决策&#xff0c;这是进入临床实践所需…