Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >opencv(4.5.3)-python(二十)--轮廓属性

opencv(4.5.3)-python(二十)--轮廓属性

作者头像
用户9875047
发布于 2022-12-07 02:19:00
发布于 2022-12-07 02:19:00
31100
代码可运行
举报
文章被收录于专栏:机器视觉全栈er机器视觉全栈er
运行总次数:0
代码可运行

翻译及二次校对:cvtutorials.com

我们将学习如何提取一些常用的物体属性,如实体性、等效直径、掩膜图像、平均灰度等。(注意:中心点、面积、周长等也属于这一类,但我们在上一章已经看到了)

  1. 1. 纵横比

它是物体的边界矩形的宽度和高度的比率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x,y,w,h = cv.boundingRect(cnt)
aspect_ratio = float(w)/h
  1. 2. 外延

外延是指轮廓线面积与边界矩形面积的比率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
area = cv.contourArea(cnt)
x,y,w,h = cv.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
  1. 3. 实体性

实体性是指轮廓面积与凸包面积的比率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
area = cv.contourArea(cnt)
hull = cv.convexHull(cnt)
hull_area = cv.contourArea(hull)
solidity = float(area)/hull_area
  1. 4. 等效直径

等效直径是指其面积与轮廓面积相同的圆的直径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
area = cv.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
  1. 5. 方向

方向是指物体指向的角度。以下方法也给出了主轴和次轴的长度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(x,y),(MA,ma),angle = cv.fitEllipse(cnt)
  1. 6. 掩膜和像素点

在某些情况下,我们可能需要包括该对象的所有点。可以按以下方式进行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mask = np.zeros(imgray.shape,np.uint8)
cv.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv.findNonZero(mask)

这里给出了两种方法,一种是使用Numpy函数,另一种是使用OpenCV函数(最后一行注释)来做同样的事情。结果也是一样的,但有一点不同。Numpy给出的坐标是(行,列)格式,而OpenCV给出的坐标是(x,y)格式。所以基本上答案会互换。注意,row=y,column=x。

  1. 7. 最大值、最小值和它们的位置

我们可以用掩膜图像找到这些参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray,mask = mask)
  1. 8. 平均颜色或平均灰度

在这里,我们可以找到一个物体的平均颜色。也可以是灰度模式下物体的平均灰度。我们再次使用相同的掩膜来做这件事。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean_val = cv.mean(im,mask = mask)
  1. 9. 极点

极点指的是物体的最上面、最下面、最右边和最左边的点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])

例如,如果我把它应用于印度地图,我得到以下结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉全栈er 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
opencv 9 -- 轮廓 性质
1 长宽比 边界矩形的宽高比 x,y,w,h = cv2.boundingRect(cnt) aspect_ratio = float(w)/h 2 Extent 轮廓面积与边界矩形面积的比 area = cv2.contourArea(cnt) x,y,w,h = cv2.boundingRect(cnt) rect_area = w*h extent = float(area)/rect_area 3 Solidity 轮廓面积与凸包面积的比 area = cv2.contourArea(cnt) hu
wust小吴
2019/07/08
6980
【python opencv】轮廓属性
这里提供了两个方法,一个使用Numpy函数,另一个使用OpenCV函数(最后的注释行)。结果也是一样的,只是略有不同。Numpy给出的坐标是(行、列)格式,而OpenCV给出的坐标是(x,y)格式。所以基本上答案是可以互换的。注意,row = x, column = y。
西西嘛呦
2020/08/26
1.2K0
【python opencv】轮廓属性
OpenCV实现机器人对物体进行移动跟随
结合ROS控制turtlebot3或其他机器人运动,turtlebot3机器人的教程见我另一个博文:ROS控制Turtlebot3
小黑鸭
2020/11/24
7860
四个极点
leftmost= (173, 54) rightmost= (282, 68) topmost= (218, 10) bottommost= (222, 114)
裴来凡
2022/05/28
5320
四个极点
Solidity
注意:轮廓就像从黑色背景中找到白色物体,通常情况下,预先对图像进行阈值分割或边缘检测得到二值图像。
裴来凡
2022/05/28
3570
Solidity
ROS实现无人机目标跟踪/物体跟随/循迹
无人机自主物体跟随/循迹 1. 物体跟踪 1.1 实现思路 1.2 代码示例 2. 自主寻线 本实验采用ROS和OpenCV实现功能,实验平台采用Parrot的Bebop2无人机 ROS部分的学习可以参考我的专栏:ROS学习记录 实验平台的操作方式见:ROS控制Parrot Bebop2无人机 1. 物体跟踪 1.1 实现思路 调用无人机的图像: cv_image = self.bridge.imgmsg_to_cv2(data, “bgr8”) 之后同OpenCV实现机器人对物体进行移动跟随一样,
小黑鸭
2020/11/24
1.8K0
opencv(4.5.3)-python(二十三)--直方图的寻找、绘制、分析
那么什么是直方图?你可以把直方图看作是一种图,它可以让你对图像的灰度分布有一个整体的了解。它是一个在X轴上有像素值(范围从0到255,不一定),在Y轴上有图像中相应像素数的图。
用户9875047
2023/02/26
8000
opencv(4.5.3)-python(二十三)--直方图的寻找、绘制、分析
Opencv - Contours 属性及操作 Python API
cv2.findContours函数输入有三个参数: - thresh: source image - cv2.RETR_TREE: 轮廓检索模式 - cv2.CHAIN_APPROX_SIMPLE: 轮廓逼近方法 输出三个结果: - contours: 图像中所有的轮廓,python列表的形式保存. 每个单独的contour是包括物体边界点的(x,y)坐标的Numpy 数组.
AIHGF
2019/02/18
3.2K0
Opencv - Contours 属性及操作 Python API
OpenCV系列之轮廓特征 | 二十二
特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等。请查看特征矩上的维基百科页面。函数cv.moments()提供了所有计算出的矩值的字典。见下文:
磐创AI
2019/12/11
9070
基于OpenCV的区域分割、轮廓检测和阈值处理
OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像处理领域。它在现实世界中的典型应用是人脸识别,物体检测,人类活动识别,物体跟踪等。
小白学视觉
2020/09/29
2.5K0
基于OpenCV的区域分割、轮廓检测和阈值处理
OpenCV检测轮廓极点(Python C++)
今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。
Color Space
2020/08/21
1.3K0
OpenCV检测轮廓极点(Python C++)
opencv(4.5.3)-python(十八)--轮廓线入门
轮廓线可以简单地解释为连接所有连续点(沿边界)的曲线,具有相同的颜色或灰度。轮廓线是形状分析和物体检测与识别的一个有用工具。
用户9875047
2022/12/07
6680
opencv(4.5.3)-python(十八)--轮廓线入门
14: 轮廓特征
注意轮廓特征计算的结果并不等同于像素点的个数,而是根据几何方法算出来的,所以有小数。
CodecWang
2021/12/07
9120
14: 轮廓特征
OpenCV轮廓按面积大小排序(附Python/C++代码)
今天分享一个使用OpenCV给轮廓排序的例子,排序是依据轮廓面积的大小,当然你还可以改成其他的,比如宽高,长度等。
Color Space
2020/05/22
7.3K1
基于OpenCV的手掌检测和手指计数
OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。
小白学视觉
2020/09/22
1.9K0
基于OpenCV的手掌检测和手指计数
使用python3+opencv3实现的识别答题卡的例子(01)
由于工作需要,最近在研究关于如何通过程序识别答题卡的客观题的答案,之前虽然接触过python,但对于计算机视觉这一块却完全是一个陌生的领域,经过各种调研,发现网上大多数的例子都是采用的OpenCV这个开源库来做的,OpenCV是计算机视觉领域的处理的一个非常优秀的开源库,原生由C++编写,也提供了各个主流编程语言的接口支持,这里选择python完全是因为python在计算机科学领域有着压倒性的优势和生态系统,所以使用它毫无疑问,最快上手的方式莫过于直接阅读网上已有的例子或者轮子了,通过阅读源码以问题驱动的方
我是攻城师
2018/05/15
2.2K0
OpenCV二值图像案例分析精选 | 第二期
大家好,之前发过一篇文章是知识星球上问题,选择了几个经典的二值图像分析问题,从思路到代码实现给大家分析一波,最近又总结收录了知识星球上的提问,实现了从思路分析到代码实现的完整,下面我们就来看看这几个案例思路分析、运行效果、实现的相关API说明等。
OpenCV学堂
2019/09/12
9360
OpenCV二值图像案例分析精选 | 第二期
OpenCV 查找轮廓
OpenCV 提供了 findContours[2] 函数查找轮廓,需要以二值化图像作为输入、并指定些选项调用即可。
GoCoding
2021/06/22
9260
OpenCV 查找轮廓
使用python3+opencv3实现的识别答题卡的例子(02)
例子02是ayoungprogrammer博客上参考作者原版C++代码和思路,然后改造成python版本的,先在本地运行成功之后,然后加上自己的理解,给大多数核心代码加上了详细的中文注释,并在每一个关键阶段都会弹出具体的窗体展示识别流程,这样便于大家更能详细的看到核心部分的细节,感兴趣的同学,可以自己在再尝试加一些更细部分的debug弹窗。
我是攻城师
2018/07/23
9020
使用python3+opencv3实现的识别答题卡的例子(02)
使用python3+opencv3实现的识别答题卡的例子(02)
例子02是ayoungprogrammer博客上参考作者原版C++代码和思路,然后改造成python版本的,先在本地运行成功之后,然后加上自己的理解,给大多数核心代码加上了详细的中文注释,并在每一个关键阶段都会弹出具体的窗体展示识别流程,这样便于大家更能详细的看到核心部分的细节,感兴趣的同学,可以自己在再尝试加一些更细部分的debug弹窗。
我是攻城师
2018/05/22
1.2K2
相关推荐
opencv 9 -- 轮廓 性质
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验