opencv计算点集凸包

如何在OpenCV Python中查找并绘制图像轮廓的凸包? 凸包看起来类似于轮廓近似,但它并不完全是轮廓近似。凸包是一个凸的曲线,围绕着一个物体。凸曲线总是鼓出或至少是平的。凸包可以找到凸性缺陷并进行纠正。 阅读详情

点集求凸包的问题经常会遇到,https://www.geeksforgeeks.org/orientation-3-ordered-points/  给出了一种思路,有空了再仔细研究,本文总结了opencv中相关的方法并给出一个实例。

参考:OpenCV: Structural Analysis and Shape Descriptors

1、opencv接口

hull = cv.convexHull(points[, hull[, clockwise[, returnPoints]]])

参数说明:

  1. points:点集。需要注意的是,该参数输入的坐标系是向右为X,向上为Y,和迪卡尔坐标系是相同的,而opencv中的图像坐标系是向右为X,向下为Y,即图像的左上角坐标为(0,0)。
  2. clockwise:如果设置为True,输出的凸包是顺时针的,如果设置为False,输出的凸包是逆时针的。
  3. returnPoints:如果设置为True,返回凸包的点坐标,如果设置为False,输出凸包点在点集points中的序号。

2、示例

代码如下:

# encoding:utf-8

import numpy as np
import cv2
import matplotlib.pyplot as plt

axis_list = [[3,1],[2,2],[3,3],[4,4],[2,4],[2,3],[1,2],[2,2],[2,1]]
axis_list = np.array(axis_list)

hull = cv2.convexHull(axis_list,clockwise=True,returnPoints=True)
print(hull)

hull = np.squeeze(hull)
plt.scatter(axis_list[:,0],axis_list[:,1])
plt.plot(hull[:,0],hull[:,1],"r")
plt.plot([hull[-1,0],hull[0,0]],[hull[-1,1],hull[0,1]],"r")
plt.show()

计算结果如下图所示,其中蓝色点是点集,红色线条是凸包轮廓。

使用OpenCV进行凸包处理 OpenCV是一个流行的计算机视觉库,提供了很多有用的图像和视频处理工具。其中一个特别有用的功能是凸包(Convex Hull)处理。通过以上代码,我们可以很容易地使用OpenCV进行凸包处理。在计算机视觉和图像处理中,凸包通常用于识别形状或边缘。在这里,我们创建了一个黑色图像,并使用drawContours函数在其上绘制凸包。使用OpenCV,我们可以轻松地计算给定点集的凸包。在这里,我们生成20个点,每个点的x和y坐标都在0到400之间。这将为我们生成一个图像,其中红色圆表示随机点,绿色轮廓表示凸包。 阅读详情

相关推荐

MATLAB不能识别已安装的visual studio 2015解决方法

首先,对于MATLAB识别已经安装的vs版本通过命令: mex -setup 下图为本电脑下同时安装的两个visual studio 如果搞清楚MATLAB识别电脑上安装vs的过程,可通过命令: mex -setup -v MATLAB输出识别编译器的整个过程。其中HKLM和HKCU分别是注册表中的HKEY_CURRENT_USER,HKEY_LOCAL_MA…的缩写,MATLAB没有找到对应编译器是由于注册表里没有对应信息(主要是文件路径,C++编译器的路径),或者在注册表里存在该信息,但是找不到

qq_36320710的博客 4895

计算凸包的两种方法

这篇文章将会简单介绍一下计算凸包的两种算法:Gift Wrapping Algorithm 和 Andrew's Algorithm 首先说一下什么是凸包,,用最通俗的话来讲,在一个二维坐标平面上,随便给你一些点,然后让你从这些点里选择一部分连起来,要求连起来形成的这个图形是凸多边形,并且能够把给出的所有点包起来,并且选择的这些点的数目最少。 为了辅助说明,在这里举一个例子。 建立一个平面直角坐标系,假设给出的点坐标是(1,1),(3,2),(-4,0),(0,0),(2,2),(3,-1),

Water_tundra_的博客 2215

车道线检测(传统基于Opencv的方法)

传统车道线检测方法主要是使用颜色选择、高斯平滑、边缘检测、ROI区域选择、霍夫变换、标定车道边界等Opnecv图像处理操作去检测道路上的车道线,我自己对很多用这类处理对很多道路场景车道线进行过实验,这类算法往往需要人工根据不同街道场景手动去反复调整各算法参数,从而才能使检测效果最佳。

Yangxiaoaijiejie的博客 2070

opencv学习6:凸包算法详解及代码示例

简介 凸包(Convex Hull)是一个计算几何(图形学)中的概念。 在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的线性组合来构造. 在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。 用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。 ...

weixin_42713739的博客 1833

如何编写 Skill 实现自动化用例生成

Skill 本质上是一组结构化的指令和工具定义,它告诉 AI 模型在特定场景下应该遵循什么流程、调用哪些工具、输出什么格式的内容。元信息:名称、描述、版本等。指令(Instructions):定义 AI 的行为准则和任务流程。工具(Tools):AI 可以调用的外部能力,如文件读写、代码执行、API 请求等。上下文(Context):预设的输入输出格式或示例。编写一个用于自动生成测试用例的 Skill,核心在于定义清晰的指令流程和输出规范。

Cesare的博客 2689

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

Opencv(十八) : 图像凸包检测

机器视觉中凸包检测

Mrliu__的博客 1328

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是通过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1166

OpenCV图像处理—— 凸包检测

前言 凸包(Convex Hull)是一个计算几何(图形学)中的概念,在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。通俗的讲就是把检测到一个平面的点以最大的外包多边形包进去。 凸包检测 1.C++ API 原型 void convexHull(InputArray points, OutputArray hull, bool clockwise=false, bo...

知来者逆的博客 2245

STM32+LoRa模块实战:从环境搭建到数据传输完整指南(附避坑清单)

本文提供STM32与LoRa模块从环境搭建到数据传输的完整实战指南,涵盖硬件连接、开发环境配置、AT指令设置、频段优化及低功耗设计等关键步骤,特别针对常见问题提供解决方案和避坑清单,助力物联网开发者高效实现远距离低功耗通信。

weixin_29168813的博客 289

使用virtuoso gds转lef操作方法

2) 然后,需要创建Pin,这里Pin的概念不同于label/text,是有实际金属的,二者的区别类似于pr中的port和terminal。1) 首先,需要画prBoundary,这个用drawing层的prBoundary画是不行的,不过建议pr阶段就把prBoundary转到gds里,在virtuoso layout中画prBoundary就比较容易。另外,用Create - Create Pin也可以创建pin,更适用于PG pin,操作时先给pg shape打label,最好放正中间。

m0_61544122的博客 1374

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

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

jndingxin的专栏 1335

Centos7 yum 报错「Errno 256」No more mirrors to try 解决方法

首先该问题的出现是由于网络的震荡导致,这是重点。(1)将源更换成阿里云的官方源,步骤参考如上(2)同时将zabbix的官方源更换成阿里云里面的zabbix镜像源,因为zabbix官方源根本网络不通,因为国家防火墙的拦截,导致网络不通。这是阿里源的zabbix镜像地址: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/修改系统中早期生成的zabbix.repo文件,如下:主要是把baseurl替换成阿里云的zabbix镜像地址即可。

专注基础架构领域 3872

基于C++的opencv练习凸包点

#include<iostream> #include<opencv2/opencv.hpp> #include<string> using namespace std; using namespace cv; int main() {  Mat image(600, 600, CV_8UC3);  RNG& rng = theRNG...

weixin_43474255的博客 452

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【opencv】示例-convexhull.cpp 随机生成一些点,然后计算这些点的凸包并显示出来...

// 包含opencv2的图像处理和图形用户界面库 //include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <iostream> // 使用opencv和标准命名空间中的对象和函数 using namespace cv; using namespace std; // 定义一个帮助函数,解释...

cxyhjl的博客 370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

花老湿学习OpenCV:凸包检测

凸包: 凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。简单来说,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。理解物体形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。 判断:如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。 直观的理解,就是一...

qq_41942564的博客 5175

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

opencv学习之图像凸包

图像凸包是表达图像一维属性(比如长宽、面积等)信息的一种方式。 所以,计算图像凸包对一些图像前期、后期处理都有一定的帮助 看到别人的一篇代码如下 clc; clear all; close all;  I = imread('c://ce.jpg');  I = rgb2gray(I);  bw = im2bw(I, graythresh(I));  fi

qq_26460507的博客 1319

在图像上随机生成点,然后根据这些点计算包围这些点的凸多边形convexHull

hull可以是点向量,代表原来points的那些下标是多边形的边界点,并且是按逆时针或者顺时针来进行排列的,也就是说,他们并不是一定按照原来点的下标大小顺序来排序。 #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; #define ...

gaocui883的博客 1144

OpenCV:凸包

当评价一个点集的2D空间分布时,凸包是一个有用的工具。这个点集可以是轮廓、关键点集合等。计算凸包,OpenCV提供了函数:convexHull(Mat(points), hull, true);下面的OpenCV示例程序,随机产生了一个点集,然后计算了它的凸包。并将点集和凸包画了出来。#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/h

czl389的专栏 1370

opencv 凸包查找convexHull

凸包(Convex Hull)是一个计算几何(图形学)中的概念,在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。 X的凸包可以用X内所有点(x1, x2….xn)的线性组合来构造。在二维欧几里得空间中,凸包可以想象为一条刚好包着所有点的橡皮圈,用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。常见的有Graham’s Scan法和Jarvis步进法。 函数说明: void cv::convexHull ( Inpu

一航jason 615

基于C++的opencv练习最小外接矩形minAreaRect

#include<iostream> #include<opencv2/opencv.hpp> #include<string> using namespace std; using namespace cv; int main() {  Mat image(600, 600, CV_8UC3);  RNG& rng = theRNG...

weixin_43474255的博客 2501

寻找物体的凸包

凸包是计算几何(图形学)中常见的概念,简单来说就是二维平面上的点集,凸包就是将最外层的点连接起来形成凸多边形,它能包含点集中的所有点的,理解物体形状或者轮廓的一种有用的方法,然后计算凸缺陷, 很多复杂的物体的特性都能很好的被这种缺陷表现出来 2.用手这一个概念来解释凸缺陷,凸缺陷就是代表了所有的凸包的边,边就是代表了凸缺陷的。 3.在opencv中convexHull()函数用于寻找图像点集中的凸...

nbxuwentao的博客 639

OpenCV学习(65)

图像轮廓与图像分隔修复(3):寻找物体的凸包 一,凸包; 二,寻找凸包:convexHull()函数; 三,基础示例程序:凸包检测基础; 一,凸包 凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。简单来说,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它是能包含点集中所有点的。理解物体形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)。很多复杂物体的特性能很好地被这种缺陷表现出来。...

m0_53123717的博客 1097

c++处理图像---绘制物体的凸包:cv::convexHull

c++处理图像---绘制物体的凸包:cv::convexHull

qq_46107892的博客 898

Opencv3笔记22——寻找物体的凸包

1 凸包 凸包(Convex Hull)是一个计算几何(图形学)中常见的概念。给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形。 2 寻找凸包:convexHull()函数 函数原型 void convexHull(InputArray points, OutputArray hull, bool clockwise = false,bool returnPoints = ...

绝尘 2503

一系列点画框(不规则框)

做个记录:先求点的凸包,再画 void draw_hull() { int w = 600; int h = 500; cv::Mat polyImg = cv::Mat::zeros(w,h,CV_8UC3); std::vector<Point> planevKeys = { {159 , 64}, {136 , 74 }, {178 , 34 }, {132 , 89 },{124 , 112}, {178 , 50 },{101

空大白 730
上一篇: opencv寻找图像外轮廓
下一篇: 安装tensorflow-gpu+CUDA+cuDNN--基于linux和win10环境
__Destiny__
博客等级 码龄9年 27粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值