OpenCV系列之轮廓属性 | 二十三
在这里,我们将学习提取一些常用的物体属性,如坚实度,等效直径,掩模图像,平均强度等。更多的功能可以在Matlab regionprops文档中找到。
(注:质心、面积、周长等也属于这一类,但我们在上一章已经见过)
1. 长宽比
它是对象边界矩形的宽度与高度的比值。
x,y,w,h = cv.boundingRect(cnt)
aspect_ratio = float(w)/h
2. 范围
范围是轮廓区域与边界矩形区域的比值。
area = cv.contourArea(cnt)
x,y,w,h = cv.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
3. 坚实度
坚实度是等高线面积与其凸包面积之比。
area = cv.contourArea(cnt)
hull = cv.convexHull(cnt)
hull_area = cv.contourArea(hull)
solidity = float(area)/hull_area
4. 等效直径
等效直径是面积与轮廓面积相同的圆的直径。
area = cv.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
5. 取向
取向是物体指向的角度。以下方法还给出了主轴和副轴的长度。
(x,y),(MA,ma),angle = cv.fitEllipse(cnt)
6. 掩码和像素点
在某些情况下,我们可能需要构成该对象的所有点。可以按照以下步骤完成:
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 = x, column = y
。
7. 最大值,最小值和它们的位置
我们可以使用掩码图像找到这些参数。
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray,mask = mask)
8. 平均颜色或平均强度
在这里,我们可以找到对象的平均颜色。或者可以是灰度模式下物体的平均强度。我们再次使用相同的掩码进行此操作。
mean_val = cv.mean(im,mask = mask)
9. 极端点
极点是指对象的最顶部,最底部,最右侧和最左侧的点。
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])
例如,如果我将其应用于印度地图,则会得到以下结果:
练习
1.matlab的regionprops doc中仍然有一些特性。试着去实现它们。
☆☆☆为方便大家查阅,小编已将OpenCV-Python专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“文章”,如图:
或点击下方“阅读原文”,进入OpenCV-Python专栏,即可查看系列文章。
不断更新资源
获取更多精彩
长按二维码扫码关注
OpenCV系列之轮廓属性 | 二十三相关推荐
- OpenCV系列之轮廓分层 | 二十五
目标 这次我们学习轮廓的层次,即轮廓中的父子关系. 理论 在前几篇关于轮廓的文章中,我们已经讨论了与OpenCV提供的轮廓相关的几个函数.但是当我们使用cv.findcontour()函数在图像中找到 ...
- OpenCV系列之轮廓入门 | 二十一
目标 了解轮廓是什么. 学习查找轮廓,绘制轮廓等. 你将看到以下功能:cv.findContours(),cv.drawContours() 什么是轮廓? 轮廓可以简单地解释为连接具有相同颜色或强度的 ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- OpenCV系列之轮廓:更多属性 | 二十四
目标 在本章中,我们将学习 凸性缺陷以及如何找到它们 查找点到多边形的最短距离 匹配不同的形状 理论和代码 1. 凸性缺陷 我们看到了关于轮廓的第二章的凸包.从这个凸包上的任何偏差都可以被认为是凸性缺 ...
- opencv函数findcontours_OpenCV系列之轮廓入门 | 二十一
目标 了解轮廓是什么. 学习查找轮廓,绘制轮廓等. 你将看到以下功能:cv.findContours(),cv.drawContours() 什么是轮廓? 轮廓可以简单地解释为连接具有相同颜色或强度的 ...
- OpenCV精进之路(二十三):实例——Bag of Features(BoF)图像分类实践
在深度学习在图像识别任务上大放异彩之前,词袋模型Bag of Features一直是各类比赛的首选方法.首先我们先来回顾一下PASCAL VOC竞赛历年来的最好成绩来介绍物体分类算法的发展. 从上表我 ...
- OpenCV系列之图像金字塔 | 二十
目标 在本章中, 我们将学习图像金字塔 我们将使用图像金字塔创建一个新的水果"Orapple" 我们将看到以下功能:cv.pyrUp(),cv.pyrDown() 理论 通常,我们 ...
- 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件 一.概述 Spring Boot允许多种配置来源,官网是这样说的: Spring Boot使用一种非常特殊的Property ...
最新文章
- 【转载】自然语言推理介绍
- vba执行linux命令,如何使用vba的shell()运行参数的.exe?
- 每日编程-20170326
- 利用URL重写跟踪Session(多学一招)
- 计算机远程用户关机指令,有哪些远程关机命令?如何用向日葵进行远程关机电脑?...
- Java 14中对switch的增强,终于可以不写break了
- 首席新媒体运营黎想教程:电商运营必须掌握的5个公式
- 计算机组成与体系结构——计算机体系结构分类-Flynn——2020.11.19
- 中国信通院:5G无人机应用白皮书
- 使用Python将Word表格嵌入Excel中!
- 基于支付宝微信通知的一种个人收款回调方案
- Docker通过DockerFile自定义Centos 镜像
- M8 解决 无法用blt 半透明和AlphaBlt实现关键色的问题。
- 5个一见钟情的手机APP软件 使用过后必须赞赞赞
- 华为云数字资产链,构建新型数字经济价值
- 【嵌入式Linux应用开发】温湿度监控系统——绘制温湿度折线图
- 初学者正确学习UI设计的3个方法!
- css简介,基本语法
- 《软件功能测试自动化实战教程》—第6章6.7节文件数据源的数据驱测试
- 超越ConvNeXt!Conv2Former:用于视觉识别的Transformer风格的ConvNet