findcontours 轮廓坐标点获取及使用

前言:

主要是对 np数组进行分析

说明

python 复制代码
#轮廓的数据格式
contour = np.array([[[x1, y1]], [[x2, y2]], ..., [[x80, y80]]])



#例子:
o = binary    #二值化图像 binary
contours, hierarchy = cv.findContours(o ,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)
print(f"contours={contours}")
"""
contours=(array([[[209, 308]],

       [[209, 313]],

       [[208, 314]],

       [[208, 315]],

       [[207, 316]],
       ....
       [[271, 314]],

       [[270, 313]],

       [[270, 308]]], dtype=int32),)
       
"""
print(len(contours)) # 1
print(contours[0].shape)  #(80, 1, 2)

假设 contour 的形状是 (80, 1, 2),这表示该轮廓由 80 个点组成,每个点的坐标用两个数值表示(即 x 和 y 坐标)。

contour 的结构

contour 是一个三维数组:

  • 第一维是点的数量(这里是 80)。

  • 第二维是一个固定长度为 1 的维度,这是 OpenCV 中轮廓表示的约定格式。

  • 第三维是坐标值,包含两个元素:x 坐标和 y 坐标。

contour[:, 0, 0] 的含义

  • [:, 0, 0] :表示从 contour 中提取所有点的 x 坐标。

具体来说:

  • : 表示选取所有行(所有点)。

  • 0 表示选取第二维的第 0 个元素(因为第二维长度为 1)。

  • 0 表示选取第三维的第一个元素(即 x 坐标)。

因此,contour[:, 0, 0] 提取的是所有点的 x 坐标,形成一个一维数组。

同理 contour[:, 0, 1] 表示提取所有点的y坐标,形成一个一维数组。

例子

python 复制代码
contour = np.array([ [[10, 20]], [[30, 40]], [[50, 60]]])
print(contour.shape) #(3, 1, 2)

print(contour[:, 0, 0])  # 结果是 [10, 30, 50]

print(contour[:, 0, 1])  # 结果是 [20, 40, 60]

"""

注意:
contour[:, 0, 0]  中
第一个元素表示所有 点  ,3个点

第二个元素 0 表示选取第二维的第 0 个元素(因为第二维长度为 1),
相当于上面第二个方括号,

第三个元素 0 表示选取第三维的第一个元素(即 x 坐标),
即 第三个方括号的 内部两个元素中的第一个

"""

参考资料

kimi

相关推荐
兵慌码乱1 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot2 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海7 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱10 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽14 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码15 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python