【OpenCV入门学习--python】凸包算法(convex hull)

Python 分类和聚类结果的可视化 绘制出点的外接多边形 ConvexHull函数 以iris为例,最终画出来的图在最下面,真的很好看。 ######################################################################## #Call required libraries from sklearn import datasets import numpy as np # Data manipulation import pandas as pd # Dataframe manipulati 阅读详情

例子源于OpenCV官网–凸包算法(convex hull)
(https://docs.opencv.org/4.x/d7/d1d/tutorial_hull.html)

代码:

#通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包。
from __future__ import print_function
import cv2 as cv
import numpy as np
import argparse
import random as rng
rng.seed(12345)
def thresh_callback(val):
    threshold = val
    # Detect edges using Canny。使用Canny检测边缘
    canny_output = cv.Canny(src_gray, threshold, threshold * 2)
    # Find contours。找到轮廓
    contours, _ = cv.findContours(canny_output, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
    # Find the convex hull object for each contour。找出每个轮廓的凸包对象
    hull_list = []
    for i in range(len(contours)):
        hull = cv.convexHull(contours[i])
        hull_list.append(hull)
    # Draw contours + hull results。绘制轮廓
    drawing = np.zeros((canny_output.shape[0], canny_output.shape[1], 3), dtype=np.uint8)
    for i in range(len(contours)):
        color = (rng.randint(0,256), rng.randint(0,256), rng.randint(0,256))
        cv.drawContours(drawing, contours, i, color)
        cv.drawContours(drawing, hull_list, i, color)
    # Show in a window
    cv.imshow('Contours', drawing)
# Load source image
parser = argparse.ArgumentParser(description='Code for Convex Hull tutorial.')
parser.add_argument('--input', help='Path to input image.', default='Base_0.png')
args = parser.parse_args()
src = cv.imread(cv.samples.findFile(args.input))
if src is None:
    print('Could not open or find the image:', args.input)
    exit(0)
# Convert image to gray and blur it。转换图像到灰色并且模糊它
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
src_gray = cv.blur(src_gray, (3,3))
# Create Window
source_window = 'Source'
cv.namedWindow(source_window)
cv.imshow(source_window, src)
max_thresh = 255
thresh = 100 # initial threshold
cv.createTrackbar('Canny thresh:', source_window, thresh, max_thresh, thresh_callback)
thresh_callback(thresh)
cv.waitKey()

原图:
在这里插入图片描述

在这里插入图片描述

运行结果:
在这里插入图片描述
在这里插入图片描述

ConvexHull-凸包-原理-代码实现 Andrew’s Monotone Chain 算法是一种更高效的凸包算法,其时间复杂度为 O(n log n)。该算法首先将所有点按 x 坐标排序,然后分别构建下凸包和上凸包,最后合并两者。在三维点云处理中,我们在使用算法一般会利用别人高效实现的方式,这里使用open3d库实现凸包算法。为了方便理解,我们现已二维数据进行测试。 阅读详情

相关推荐

python-OpenCV-凸包

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

qq_59117868的博客 1135

ConvexHull:Python中的ConvexHull算法可视化

凸包 Python中的ConvexHull算法可视化

OpenCV凸包检测技术与工业视觉应用实战

凸包检测是计算机视觉中的基础几何处理技术,通过寻找包围目标轮廓的最小凸多边形实现形状特征提取。该技术基于计算几何原理,具有旋转平移不变性和形状简化表示的特点,在OpenCV中通过convexHull函数高效实现。从技术价值看,凸包分析能有效解决工业检测中的零件外形评估、手势识别中的特征提取等核心问题。结合凸缺陷检测(Convexity Defects)可进一步识别轮廓凹陷区域,典型应用包括工业零件缺陷识别、自动驾驶障碍物轮廓分析等场景。本文通过OpenCV实战演示,详细解析了从图像预处理、轮廓提取到凸包计算

weixin_34375251的博客 575

Python凸包

ConvexHull是spatial中的一个类,主要功能是找到一组点的边缘,并做一个凸包。其必要的初始化参数为一个点集,点集格式为n×m维度的数组,n为点集中点的个数,m为点的维度。

微小冷的学习笔记 5027

详解OpenCV的函数convexHull()和函数convexityDefects(),并利用它们)凸包(凸壳)检测及凸包(凸壳)的缺陷检测

要理解凸包(凸壳)检测,首无要知道什么是凸包(凸壳)凸包(凸壳)是指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。凸包(凸壳)能包含点集中所有的点,凸包检测常应用在物体识别、手势识别及边界检测等领域。 OpenCV中提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状的凸包缺陷分析时使用convexityDefe...

昊虹AI笔记 2万+

OpenCV入门之寻找图像的凸包convex hull

介绍   凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。   在图像处理过程中,我们常常需要寻找图像中包围某个物体的凸包凸包跟多边形逼近很像,只不过它是包围物体最外层的一个凸集,这个凸集是所有能包围这个物体的凸集的交集。如下图所示: 在上图中,绿色线条所包围的凸集即为白...

aix26249的博客 545

OpenCV(三十六):多边形逼近与凸包

H§ 是凸集;P ⊆ H§;H§ 是包含 P 的所有凸集中的最小一个。对比项多边形逼近(approxPolyDP)凸包convexHull)核心功能轮廓简化计算最小凸包围区域输出近似原轮廓的多边形覆盖所有点的最小凸多边形是否保持原形状凹陷是否(会“撑平”所有凹陷)是否保持点顺序是是(可返回索引)顶点数量取决于 epsilon通常较少常用场景边缘简化、检测三角/矩形等形状手势分析、碰撞检测、几何包围。

www_dong的博客 1197

Python OpenCV 多边形拟合相关案例

本文整理总结基本图像处理方面的凸多边形拟合相关方法,可以实现物体边缘的平滑、规整化处理。 以上处理算法的实质是对物体边缘点进行减少或增加的过程,增加时可以实现边缘的规整化,减少时可以让曲线看上去更加平滑些。 1、Skimage实现图像边缘规整化处理 import matplotlib.pyplot as plt from skimage import data,color,morpholo...

人工智能讲师团 3757

OpenCVPython 轮廓 (contour)凸包 (convex Hull)

查找图像的四边形的顶点。

红叶谷 wsp_1138886114的博客 794

Python+OpenCV实现实时手势识别系统

手势识别是计算机视觉领域的重要技术,通过分析手部轮廓特征实现自然的人机交互。其核心原理包括视频采集、色彩空间转换、轮廓检测和凸包分析等技术环节。在工程实践中,OpenCV提供了完整的视觉处理流水线支持,结合HSV色彩空间和形态学处理可有效提升识别准确率。该技术在VR/AR交互、智能家居控制等场景具有广泛应用价值,本方案采用Python+OpenCV构建原型系统,演示了从视频采集到手势分类的完整实现过程,特别适合作为计算机视觉入门实践项目。

weixin_34320159的博客 319

基于dlib和OpenCV的人脸检测与特征点标定实战

人脸检测是计算机视觉的基础技术,通过分析图像中的面部特征实现身份识别与行为分析。其核心原理是利用HOG(方向梯度直方图)特征结合SVM分类器进行模式识别,或采用深度学习模型实现端到端检测。在工程实践中,OpenCV和dlib等开源库提供了高效实现方案,能够平衡检测精度与计算效率。典型应用场景包括安防监控中的人脸识别、医疗诊断中的微表情分析,以及人机交互中的虚拟化妆等。本文以dlib的68点特征模型为例,详细解析从静态图像到实时视频的面部特征点标定技术,并分享多线程处理、ROI检测等性能优化经验。

weixin_30727835的博客 430

opencv rect画旋转矩形,OpenCV / Python:cv2.minAreaRect不会返回旋转的矩形

I want to deskew an image using. To do that I wrote (admittedly with lots of help) a program that:transforms image to be a easier to compute (thresh, dilation, etc.)draws contours around all objectsco...

weixin_30653755的博客 503

python opencv 边缘检测_Python OpenCV - 从一组轮廓点外推最大的矩形

我试图让OpenCV检测图像中的一张床。我正在运行通常的灰度,模糊,Canny,我已经尝试了Convex Hull。但是,由于存在相当多的“噪音”,这会给物体检测带来额外的轮廓和混乱。因此,我无法正确检测到床。Python OpenCV - 从一组轮廓点外推最大的矩形这里是输入图像以及Canny边缘检测结果: 正如你可以看到,它的几乎没有。我已经有了床的轮廓,尽管如此,右上角有一个间隙 - 这阻止...

weixin_39635567的博客 618

计算物体的凸包convexHull

1、什么是凸包?          点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。     一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用一根绳子把他们尽量紧地圈起来,这就是凸

jameshater的博客 4094

PaintingLight核心技术解析:基于RGB空间几何的光照算法揭秘

PaintingLight是Style2Paints团队开发的开源项目,专注于通过RGB空间几何技术实现数字绘画的光照效果编辑。该项目核心算法发表于SIGGRAPH2020/TOG2020,采用非深度学习方案,通过色彩几何构建感知层面的光照调整系统,特别适合艺术创作场景。 ## 突破性技术:RGB空间几何的创新应用 传统光照算法依赖物理建模或深度学习,而PaintingLight另辟蹊径,利用

gitblog_00693的博客 941

Halcon 与 OpenCV 多边形最大内接矩形求解:3种算法实现与适用场景对比

本文对比了Halcon与OpenCV在求解多边形最大内接矩形时的三种算法实现及其适用场景。详细分析了Halcon旋转逼近法、OpenCV的minAreaRect以及几何计算法的原理、性能特点和应用案例,帮助工程师在工业视觉检测、文档校正等场景中选择最优解决方案。

391

cv区域变黑 python_Python OpenCV - 在二进制图像中查找黑色区域

There is any method/function in the python wrapper of Opencv that finds black areas in a binary image? (like regionprops in Matlab)Up to now I load my source image, transform it into a binary image vi...

weixin_39801202的博客 433
上一篇: 【OpenCV入门学习--python】在图像中找到轮廓
下一篇: 【OpenCV入门学习--python】为轮廓创建边框和圆圈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值