opencv文档py_contours示例整理

文章目录

    • 目录说明
    • contours_begin
      • 目标
      • 什么是轮廓?
      • 如何画等高线?
      • 轮廓逼近法
    • contour_features
      • 目标
      • 1.Moments 时刻
      • 2. Contour Area 轮廓面积
      • 3. Contour Perimeter 轮廓周长
      • 4. Contour Approximation 轮廓近似
      • 5. Convex Hull 凸包
      • 6. Checking Convexity 检查凸性
      • 7. Bounding Rectangle 边界矩形
        • 7.a. Straight Bounding Rectangle 直边界矩形
        • 7.b. Rotated Rectangle 旋转的矩形
      • 8. Minimum Enclosing Circle 最小外圈
      • 9. Fitting an Ellipse 拟合椭圆
      • 10. Fitting a Line 拟合直线
    • contour_properties
      • 1. Aspect Ratio 纵横比
      • 2.Extent 范围
      • 3.Solidity 坚固度
      • 4. Equivalent Diameter 等效直径
      • 5. Orientation 方向
      • 6. Mask and Pixel Points 蒙版和像素点
      • 7. Maximum Value, Minimum Value and their locations 最大值,最小值和它们的位置
      • 8. Mean Color or Mean Intensity 平均颜色或平均强度
      • 9. Extreme Points 极端点
    • contours_more_functions
      • 目标
      • 理论与代码
        • 1.凸性缺陷
        • 2.点多边形检验
        • 3.匹配的形状
    • contours_hierarchy
      • 目标
      • 理论
      • 什么是层级?
      • OpenCV中的层次表示
      • 轮廓线检索模式
        • 1. RETR_LIST
        • 2. RETR_EXTERNAL
        • 3. RETR_CCOMP
        • 4. RETR_TREE

源码目录:opencv-4.6.0\doc\py_tutorials\py_imgproc\py_contours

目录说明

  • tutorial_py_contours_begin

    Learn to find and draw Contours
    学习查找和绘制轮廓

  • tutorial_py_contour_features

    Learn to find different features of contours like area, perimeter, bounding rectangle etc.
    学习寻找不同的轮廓特征,如面积,周长,边界矩形等。

  • tutorial_py_contour_properties

    Learn to find different properties of contours like Solidity, Mean Intensity etc.
    学习找到不同的属性的轮廓,如固体,平均强度等。

  • tutorial_py_contours_more_functions

    Learn to find convexity defects, pointPolygonTest, match different shapes etc.
    学习查找凹凸缺陷,pointPolygonTest,匹配不同形状等。

  • tutorial_py_contours_hierarchy

    Learn about Contour Hierarchy
    了解轮廓层次

contours_begin

目标

  • 了解轮廓是什么。
  • 学习寻找轮廓,绘制轮廓等
  • 你会看到这些函数:cv.findContours()cv.drawContours()

什么是轮廓?

轮廓可以简单地解释为连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和目标检测与识别的有用工具。

  • 为了更好的精度,使用二值图像。因此,在找到轮廓之前,应用阈值或canny边缘检测。
  • 自OpenCV 3.2, findContours()不再修改源图像。
  • 在OpenCV中,寻找轮廓就像从黑色背景中寻找白色物体一样。记住,要找到的对象应该是白色的,背景应该是黑色的。

让我们看看如何找到二值图像的轮廓:

import numpy as np
import cv2 as cvim = cv.imread('test.jpg')
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

cv.findContours() 函数中有三个参数,第一个是源图像,第二个是轮廓检索方式,第三个是轮廓逼近方法。它输出轮廓和层次结构。Contours是图像中所有轮廓的Python列表。每个单独的轮廓是物体边界点的(x,y)坐标的Numpy数组。

我们将在后面详细讨论第二个和第三个参数以及层次结构。在此之前,代码示例中给出的值将适用于所有图像。

如何画等高线?

使用cv.drawContours函数绘制轮廓.它也可以用来绘制任何形状,只要你有它的边界点。它的第一个参数是源图像,第二个参数是应该作为Python列表传递的轮廓,第三个参数是轮廓的索引(在绘制单个轮廓时很有用)。要绘制所有轮廓,传递-1),剩下的参数是颜色,厚度等。

  • 绘制图像中的所有轮廓:
    drawContours(img, contours, -1, (0,255,0), 3)
  • 要画一个单独的轮廓,如第四个轮廓:
    drawContours(img, contours, 3, (0,255,0), 3)
  • 但大多数时候,下面的方法将是有用的:
    cnt = contours[4]
    cv.drawContours(img, [cnt], 0, (0,255,0), 3)

最后两个方法是相同的,但当你继续,你会发现最后一个更有用。

轮廓逼近法

cv.findContours函数的第三个参数它实际上表示什么?

上面我们说过,轮廓是具有相同强度的形状的边界。它存储形状边界的(x,y)坐标。但是它能存储所有的坐标吗?这是由轮廓近似法确定的。

如果你传递了cv.CHAIN_APPROX_NONE,存储所有边界点。但实际上我们需要所有的点吗?例如,你找到了一条直线的轮廓。是否需要直线上的所有点来表示这条直线?不,我们只需要这条线的两个端点。这就是cv.CHAIN_APPROX_SIMPLE。它去除所有冗余点并压缩轮廓,从而节省内存。

下面的矩形图演示了这种技术。只需在轮廓数组中的所有坐标上画一个圆(用蓝色绘制)。第一张图片显示了我用cv.CHAIN_APPROX_NONE得到的(734点)和第二张图像显示了cv.CHAIN_APPROX_SIMPLE(只有4点)。看,它节省了多少内存!

效果图:
在这里插入图片描述
完整代码:


import numpy as np
import cv2 as cv
from matplotlib import pyplot as pltim = cv.imread('black-white.jpg')
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
contours_all, hierarchy_all = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)
print(len(contours), len(contours[0]))
print(len(contours_all), len(contours_all[0]))
img1 = im.copy()
img2 = im.copy()
for pos in contours[0]:cv.circle(img1, pos[0], 3, (0,255,0), -1)
for pos in contours_all[0]:cv.circle(img2, pos[0], 3, (0,255,0), -1)plt.subplot(221),plt.imshow(im),plt.title('Original')
plt.subplot(222),plt.imshow(img1),plt.title('cv.CHAIN_APPROX_SIMPLE')
plt.subplot(223),plt.imshow(img2),plt.title('cv.CHAIN_APPROX_NONE')plt.show()

contour_features

目标

在本文中,我们将学习

  • 查找轮廓的不同特征,如面积,周长,质心,边界框等
  • 你会看到很多与轮廓相关的函数。

1.Moments 时刻

图像矩帮助你计算一些特征,如物体的质心,物体的面积等。查看维基百科页面Image Moments

函数 cv.moments() 给出了计算出的所有矩值的字典。见下文:

import numpy as np
import cv2 as cvimg = cv.imread('star.jpg',

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式进阶——RTC时钟

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 RTC时钟原理图PCF8563寄存器控制与状态寄存器 设备地址I2C环境初始化RTC寄存器数据读取RTC寄存器数据写入RTC闹钟设置RTC定时器设置…

2024.5.28晚训题解

提前预告&#xff0c;市赛初中组会考算法题&#xff0c;应该会有两道模板题 比如DFS BFS 二分 简单动态规划&#xff0c;虽然我们没学多久&#xff0c;但是模板题你还是要会写的 A题 编辑距离 动态规划 注意多组输入 #include<iostream> using namespace std; int dp[1…

9、C#【进阶】特性

特性 文章目录 1、特性概念2、自定义特性 Attribute3、特性的使用4、限制自定义特性的使用范围5、系统自带特性1、过时特性2、调用者信息特性3、条件编译特性4、外部dll包函数特性 1、特性概念 特性是一种允许我们向程序的程序集添加元数据的语言结构 它是用于保存程序机构信息…

【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。

一个简单的经典CNN网络结构由&#xff1a;输入层、卷积层、池化层、全连接层和输出层&#xff0c;这五种神经网络层结构组成。它最最经典的实例是LeNet-5&#xff0c;它最早被设计用于手写数字识别任务&#xff0c;包含两个卷积层、两个池化层、几个全连接层&#xff0c;以及最…

ansible批量漏洞升级openssh版本

1、ansible宿主机准备好环境&#xff0c;并写好hosts文件 [rootoxidized ansible]# cat hosts [all] 10.10.200.33 10.10.200.34 10.10.200.35跑playbook之前记得提前发送秘钥 ssh-copy-id 10.10.200.33/34/352、下载好安装包&#xff0c;然后编写yml [rootoxidized ansible]…

【实用的 IDEA 配置和操作技巧总结】

前置知识 IDEA的设置快捷键为ctrlalts键&#xff0c;后文介绍IDEA常见的配置就不再赘述这一点了。 基础配置 取消默认打开上次项目 日常开发都会打开不同的项目&#xff0c;初次安装IDEA之后&#xff0c;每次打开IDEA都会开启上一次启动的项目&#xff0c;所以我们需要进入设…

0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKB方案

大纲 序列化反序列化完整TypeHandlerSQL XML完整XML Mapper测试代码代码 在《0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKT方案》中&#xff0c;我们介绍WTK方案的优点&#xff0c;也感受到它的繁琐和缺陷。比如&#xff1a; 需要借助ST_GeomFromText…

350种类型、10W+量级的API,企业应该怎么管?

忽如一夜春风来&#xff0c;万物皆可API。 在互联网时代&#xff0c;API无处不在&#xff1a;企业对外开放的数据、服务和业务能力&#xff0c;以API的形式提供给合作方&#xff1b;企业内部应用与应用、App与App之间的通信&#xff0c;通过API进行&#xff1b;甚至应用内部的…

php 连接sqlserver步骤

1.首先要确定使用的是sqlserver的哪个版本&#xff0c;比如sqlserver2012 2.确定服务器是64位还是32位的 3.确认一下使用php的哪个版本&#xff0c;比如php7.1 SQL Server 的 Microsoft PHP 驱动程序 Microsoft Drivers for PHP 支持矩阵 - PHP drivers for SQL Server | Mi…

怎么做好客户信息管理?

根据Forrester的调查表示&#xff0c;客户满意度的影响可能会使某些行业的收入每年增加高达 10 亿美元。而提升客户满意度的关键环节便是做好客户信息管理。但企业在进行客户信息管理中往往会遇到以下问题&#xff1a; 客户信息乱&#xff1a;客户信息存在各个 Excel表格、个人…

PMP报考条件怎么查询?如何判定自己是否符合条件?

PMP报考条件在PMI官网上就可以查询&#xff0c;PMP报考条件只需要符合项目管理培训经历和项目管理经验两个方面的要求即可&#xff0c;大家可以对照下方的规定判断自己是否符合PMP报名条件 PMP报考条件 以下是PMI&#xff08;中国&#xff09;官网对于PMP报名条件的规定&…

ubuntu strace命令

strace 是 Linux 系统中的一个调试工具&#xff0c;用于跟踪并记录系统调用&#xff08;system calls&#xff09;和信号&#xff08;signals&#xff09;。在 Ubuntu 中&#xff0c;strace 命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互&…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述&#xff1a;在输入框光标处&#xff0c;插入指定的内容。 效果如下&#xff1a; 实现思路&#xff1a;刚开始还在想怎么获取光标的位置&#xff0c;但是发现所做的项目是基于vue3antd组件&#xff0c;那么不简单了嘛&#xff0c;只要调…

配置物联网平台 保姆级教程

一、云平台配置&#xff08;我们这里使用阿里云&#xff09; 1、注册和登录 &#xff08;1&#xff09;找到云平台官网&#xff0c;点击右上角的注册登录&#xff0c;完成之后&#xff0c;进行实名认证&#xff0c;任选一种认证方式。 ​​​​​​​ 2、实例的开通和创建 …

Scala环境的搭建

要搭建Scala&#xff0c;我们必须先下载java&#xff0c;由于我的电脑已经搭建好了环境&#xff0c;因此我这里用截图来教大家搭建环境。 可以从网上搜索安装包对其进行安装 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 不建议下载最新版的&#xff0c;大家下载的版本可以下…

本杀小程序开发实战手册:从构思到上线

一、引言 随着移动互联网的快速发展&#xff0c;剧本杀作为一种新兴的娱乐方式&#xff0c;受到了越来越多年轻人的喜爱。为了满足市场需求&#xff0c;开发一款剧本杀小程序成为了许多创业者和开发者的选择。本文将从构思、设计、开发到上线等方面&#xff0c;为您详细解析剧…

第52期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

万界星空科技定制化MES系统帮助实现数字化生产

由于不同企业的生产流程、需求和目标各异&#xff0c;MES管理系统的个性化和定制化需求也不同。有些企业需要将MES管理系统与ERP等其他管理系统进行集成&#xff0c;以实现全面的信息共享和协同工作。有些企业需要将MES管理系统与SCADA等控制系统进行集成&#xff0c;以实现实时…

windows ollama 指定模型下载路径

为Ollama指定模型的下载路径 在Windows系统中&#xff0c;如果想为Ollama指定模型的下载路径&#xff0c;可以通过设置环境变量来实现。以下是详细的步骤&#xff1a; 确定默认下载路径&#xff1a; 默认情况下&#xff0c;Ollama的模型可能会下载到C:\Users\<用户名>…

企业内网终端监控管理软件有哪些?推荐4款企业终端监控管理软件

企业内网终端监控管理软件是一种专为企业内部网络设计的安全与管理工具&#xff0c;旨在帮助企业管理、监控和保护其内部网络中的各种终端设备&#xff0c;如个人电脑、笔记本、移动设备等。 这类软件的主要功能包括但不限于以下几个方面&#xff1a; 1&#xff0c;实时监控&a…