OpenCV-Python:轮廓

摘要:
轮廓是由一系列连接点组成的曲线,表示对象的基本形状。轮廓与边缘非常相似,但轮廓是连续的,边缘并非都是连续的。事实上,边缘主要用作图像的特征。例如,边缘特征可以区分脸和手,而轮廓主要用于分析对象的形状,例如对象的周长和面积。可以说,边缘包括轮廓。寻找轮廓的操作通常用于二值图像,因此通常首先使用阈值分割或Canny边缘检测来获得二值图像。总结使用cv2。findContours()来查找轮廓,以及cv2。drawContours()绘制轮廓

啥叫轮廓

轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。

轮廓与边缘很相似,但轮廓是连续的,边缘并不全都连续,其实边缘主要是作为图像的特征使用,比如用边缘特征可以区分脸和手,而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓。

OpenCV-Python:轮廓第1张

寻找轮廓的操作一般用于二值化图,所以通常会使用阈值分割或Canny边缘检测先得到二值图。

寻找轮廓

import cv2
img = cv2.imread('handwriting.jpg')

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 寻找二值化图中的轮廓
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))   # 结果是2
  • 参数2:轮廓的查找方式,一般使用cv2.RETR_TREE,表示提取所有轮廓并建立轮廓间的层级
  • 参数3:轮廓的近似方法,比如对于一条直线,我们可以存储该直线的所有像素点,也可以存储起点和终点,使用cv2.CHAIN_APPROX_SIMPLE就表示尽可能少的像素点表示轮廓

函数有3个返回值,image还是原来的二值化图片,hierarchy是轮廓间的层级关系,contours表示轮廓,以数组形式存储,记录了每条轮廓的所有像素点的坐标(x,y)

OpenCV-Python:轮廓第2张

绘制轮廓 

ContourPicture = cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
cv2.imshow("ContourPicture", ContourPicture)
cv2.waitKey(0)

OpenCV-Python:轮廓第3张

参数2就是得到contours,参数3表示要绘制那一条轮廓,-1表示绘制所有轮廓,参数4是颜色(B/G/R通道,所以(0,0,255)表示红色),参数5表示线宽。

总结

使用cv2.findContours()寻找轮廓,cv2.drawContours()绘制轮廓



免责声明:文章转载自《OpenCV-Python:轮廓》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇20155331《网络对抗》 Exp9 Web安全基础Python学习笔记(20)pymysql模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

数据不平衡的相关

大多数常见的机器学习算法不能很好地处理不平衡的数据集。例如,搜索引擎的点击预测(点击页面往往占很小的比例)、电子商务中的产品推荐(正在购买的推荐产品的比例很低)、信用卡欺诈检测、网络攻击识别、癌症检测等。处理数据不平衡的方法主要有以下几种。2.数据级别2.1重新采样2.1.1欠采样(下采样)欠采样通过减少丰富类的大小来平衡数据集。它试图通过增加稀有样本的数量...

学习Python3 天眼查 爬虫

在开始学习Python时,我不想看基础知识,而且我的记忆力很差。我记不住那些语法,所以我直接去了这个项目。这是相当深刻的。刚好公司有情况需要检查企业的信息,所以我想成为一名爬虫。那些有验证码的人不愿意这样做。这是个大问题。我选择了天眼查,跳过检查过程,直接写下结果。总结的步骤如下:首先,天眼查最大的障碍是字体问题。本网站上有介绍,大致意思是网页上显示的一些字...

2022年可用QQ机器人框架

4.小李子机器人官网:https://xiaolz.cn评估:支持多个Q登录和论坛似乎是目前最活跃的。它支持许多api,可以满足许多需求。没有限制,但有很多错误。...

Ansible-Tower--安装配置及破解

Ansible-Tower是将ansible的指令界面化,简明直观,简单易用。2)Ansibke-tower其实就是一个图形化的任务调度,复杂服务部署,IT自动化的一个管理平台,属于发布配置管理系统,支持Api及界面操作,Django编写。3)Ansible-tower可以通过界面从github拉取最新playbook实施服务部署,提高生产效率。...

vue.js(3)

vue中有两种类型的组件:默认组件[全局组件]和单文件组件5.1.1默认组件vue。组成部分varvm=newVue6.Vue自动化工具需要提前安装和准备一些组件开发工具,以便在了解常见组件后继续学习单文件组件。因此,我们需要首先在系统中构建vue CLI工具。官方网站:https://cli.vuejs.org/zh/VueCLI需要Node.js8.9或...

如何让FireFox/chrome新打开的标签页在后台打开,而不是立即跳转过去

Firefox:在地址栏中输入about:config以查找以下三项,所有这些项都设置为true browser。选项卡。加载后台浏览器。选项卡。加载DivertedInBackgroundbrowser。tabs LoadBookmarksInBackgroundchrome:Mac OS:按住命令键,用鼠标单击,您可以在后台打开一个新选项卡,进入Goog...