opencv轮廓相关函数

news2024/10/9 12:26:19
    • 查找轮廓

contours, hierarchy = cv2.findContours(image,mode,method)

参数:

  • image:寻找轮廓所使用的图像。(寻找过程不修改此图像)

  • mode:模式。

  • cv2.RETR_EXTERNAL只检测外轮廓;

  • cv2.RETR_LIST检测的轮廓不建立等级关系;

  • cv2.RETR_CCOMP建立两个等级的轮廓,上一层为外边界,内层为内孔的边界。如果内孔内还有连通物体,则这个物体的边界也在顶层;

  • cv2.RETR_TREE建立一个等级树结构的轮廓。

  • method:轮廓近似方法。

  • cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素坐标xy分别之差最大为1;

  • cv2.CHAIN_APPROX_SIMPLE同一条直线(水平、垂直和对角线段),只保留端点坐标,例如一个矩形轮廓只需要4个点来保存轮廓信息;

  • cv2.CHAIN_APPROX_TC89_L1 不太懂

  • cv2.CV_CHAIN_APPROX_TC89_KCOS 不太懂

返回值:

  • contours:点集形式存储的轮廓信息,vector数组,python中是个list

  • hierarchy:【输出可选】,是个vector数组,python中是list。包含有关图像拓扑的信息。它具有与轮廓数量一样多的元素。对于每个第 i 个等高线轮廓 [i],元素层次结构 [i][0]、层次结构 [i][1]、层次结构 [i][2] 和层次结构 [i][3] 分别在同一层次结构级别(第一个子轮廓和父轮廓)的下一个和上一个轮廓的轮廓中设置为 0 的索引。如果对于轮廓 i,没有下一个、上一个、父或嵌套的轮廓,则层次结构 [i] 的相应元素将为负数。

快速使用

contours = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

2.画出轮廓

cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)

参数:

  • image:绘制轮廓的目标图像

  • contours:所要绘制的轮廓(数据类型为list)

  • contourIdx:绘制轮廓list中哪一条轮廓,-1表示绘制所有。

  • color:绘制出的线条颜色。数据格式为bgr元组。如蓝色(255, 0, 0)

  • thickness线条粗细(整型)

  • linetype:线形。一般用不到。cv2.LINE_AA为抗锯齿线

  • hierarchy:有关层次结构的【可选】信息。仅当只想绘制某些轮廓时才需要它

  • maxLevel:绘制轮廓的最大标高。如果为 0,则仅绘制指定的轮廓。如果为 1,则该函数绘制轮廓和所有嵌套轮廓。如果为 2,则函数绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套轮廓等。【仅当有层次结构可用时】,才会考虑此参数。

  • offset:【可选】轮廓偏移参数。按指定的轮廓移动所有绘制的轮廓

无返回值。

快速使用

cv2.drawContours(img, contours, -1, (255,255,0), 2)
有时候会用for循环把cv2.findContours()返回轮廓contours拆开为一个个的contour,拆开前后都是list点集,故都可以送入此函数绘制

3.轮廓外接矩形

获取外接正方形

x,y,w,h = cv2.boundingRect(contours)    # 传入轮廓list
# 返回值为坐标和宽高

获取外接矩形

rect = cv.minAreaRect(contours)    # 传入轮廓list
# 返回旋转矩形
# 返回值rect包含重心坐标(x, y), 宽高(width, height), 旋转角度
# 前两个为元组,最后旋转角度为浮点

查找旋转矩形的四个点

box = cv2.boxPoints(rect)  # 查找旋转矩形的四个点。传入rect为旋转矩形
# 返回值box为包含四个点的list,浮点型

返回的box点集,查找角点示例

# 获取四个顶点坐标
left_point_x = np.min(box[:, 0])
right_point_x = np.max(box[:, 0])
top_point_y = np.min(box[:, 1])
bottom_point_y = np.max(box[:, 1])

快速应用

rect = cv2.minAreaRect(contours)
center, size, rotation = rect    # 可拆开
box = cv2.boxPoints(rect)  # 查找旋转矩形的四个点。
box = np.int0(box)    # 浮点转为整型
cv2.drawContours(img,[box],0,(0,0,255),2)

二者区别:绿线表示外接正方形,红线表示外接矩形

4.轮廓近似

approx = cv2.approxPolyDP(contours,epsilon, closed)
# 返回值approx与contours类型一样
# 传入参数:1.轮廓点集;2.轮廓近似精度(double);3.所近似出的轮廓线是否闭合(bool)

举例:(最左侧为原图)

epsilon = 0.1*cv.arcLength(cnt,True)
approx = cv.approxPolyDP(cnt,epsilon,True)

下面,在第二张图片中,绿线显示了精度 epsilon = 10% 时的近似曲线。第三幅图显示了精度 epsilon = 1% 时的情况。

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

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

相关文章

【Qt】10.Linux下,Qt连接云MySQL数据库

目录 下载MySQL压缩包 配置MySQL Qt下编译MySQL 测试 下载MySQL压缩包 网址: MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 我为了跟云服务器上的MySQL版本一致,减少不必要的麻…

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入(1)算法思想(2)算法讲解(3)代码及解析(4)代码总结2.希尔排序( 缩小增量排序 )(1)算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求: (1) 仿真LD、LED直接调制系统的输出光谱,观察系统输出性能。 (2) 采用EDFA的光纤通信系统,实现对多路光波信号的放大,实现200km、40Gbit/s的传输。用仿真软件搭建一个…

关系数据库——关系代数

文章目录一、传统的集合运算二、专门的关系运算1.选择(restriction)2.投影(Projection)3.连接(join)1)等值连接2)自然连接4.除(Division)一、传统的集合运算 …

《深入浅出计算机组成原理》学习笔记 Day17

冒险和预测(一)1. 结构冒险2. 数据冒险参考1. 结构冒险 结构冒险本质上是一个硬件层面的资源竞争问题,也就是一个硬件电路层面的问题。 CPU 在同一个时钟周期内,同时在运行两条计算机指令的不同阶段,但这两个不同阶段…

Github消息推送到Telegram,并使用Vercel部署

Github buibuibui Telegram 仓库地址:https://github.com/yesmore/gh-buibuibui-tg 借助 Github 的 Webhooks、Vercel’s Serverless API 和 Telegram Bot,连接 Github 和 Telegram,在 Telegram chat 中接收仓库的消息。 效果:你…

深入分析ConcurrentHashMap1.8的扩容实现

什么情况会触发扩容 当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作: 1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前&#xff0…

做跨境电商日本市场,如何才能让客户满意?

跨境电商作为互联网技术的产物,现如今早就风靡全世界。我国跨境电商行业的发展起步时间比较晚,但在各方力量的加持下,行业的发展日趋完善,行业对国内经济的带动作用也更加明显。当下许多国潮品牌在Starday等跨境电商服务平台的支持…

如何选择研发效能管理平台?好用的研发效能管理平台有哪些

本文将对比介绍8款比较知名的效能度量管理平台:1.PingCode;2.思码逸;3.云效;4.金山云;5.Git;6.Jenkins;7.Bamboo;8.Docker。但在对比研发效能平台之前,我们先来聊一些研发…

Linux驱动开发基础__POLL机制

目录 1 适用场景 2 POLL机制的内核代码详解 2.1 sys_poll 函数 2.2 do_sys_poll 函数 2.3 do_poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6.1 gpio_key_drv.c 6.2 button_test.c 6.3 Makefile 可以看 字符设备驱动程序之poll机制 那篇文章中的机…

【认证相关】FTA

FTA 测试需要涉及的工作与流程测试大致流程及涉及的工作送测Lab 之前需做的准备工作项目与测试样机基本信息如下信息请填写发给MTK,以便MTK 了解基本的认证项目与产品信息PICS 相关MTK 会提供一份Chip 的default PICS,但是客户还需要自行修改一些项的Val…

分享154个ASP源码,总有一款适合您

ASP源码 分享154个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 154个ASP源码下载链接:https://pan.baidu.com/s/1Jt3X-WAZv-rZswzjwyEtSQ?pwdt46u 提取码&#x…

【C++初阶】七、STL---vector模拟实现

目录 一、模拟实现接口总览 1.1 接口总览 1.2 vector整体框架 1.3 vector成员变量介绍 二、vector模拟实现 2.1 构造函数 2.1.1 无参构造 2.1.2 迭代器区间构造 2.1.3 n个val构造 2.1.4 拷贝构造 2.2 赋值运算符重载 2.2.1 传统写法 2.2.2 现代写法 2.3 析构函数…

蓝桥杯刷题018——和与乘积(贪心)

2021国赛:和与乘积 题目描述 给定一个数列 ,问有多少个区间[L,R] 满足区间内元素的乘积等于他们的和,即 输入描述 输入第一行包含一个整数 n,表示数列的长度。 第二行包含 n 个整数,依次表示数列中的数 a1​,a2​,⋯,a…

【Vue】模板语法——文本插值

一、模板语法什么是模板语法Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。在底层机制中,Vue 会将模板编…

(十四)docker安装nacos

一、简介 操作系统:Linux CentOS 7.3 64位 docker版本:19.03.8 nacos版本:默认拉取最新版本 二、实践 1、拉取镜像 docker pull nacos/nacos-server 2、运行容器 docker run --name nacos -p 8848:8848 \ --privilegedtrue \ --restar…

二、什么是GStreamer

GStreamer是一个用于创建流媒体应用程序的框架。基本的设计来自俄勒冈研究生院的视频管道,还有一些来自DirectShow的想法。 GStreamer的开发框架使编写任何类型的流媒体应用程序成为可能。GStreamer框架旨在使编写处理音频或视频或两者同时处理的应用程序变得容易。…

01_学习springdoc的基本使用

文章目录1 什么是 springdoc ?2 springdoc 基本信息3 maven 依赖4 正文来袭4.1 给 Controller 加注解4.2 给 Model 加注解5 大功告成1 什么是 springdoc ? 网上冲浪🏄🏻‍♂️时,无意间发现 java web 应用程序的在线接口文档,除…

开源大数据分析平台的内容有什么?

在大数据时代,做好数据管理是非常重要的一个步骤。可以给企业做出正确的经营决策,指引新的发展方向。因此,随着数字化时代的到来,很多企业都倾向于寻找适宜的开源大数据分析平台,以此提升企业办公协作效率,…