查找图像轮廓

简介: 【6月更文挑战第11天】查找图像轮廓。

cv2.findContours()函数用于从二值图像中查找图像轮廓,其基本格式如下。
contours,hierarchy=cv2.findContours(image,mode,method[,offset])
参数说明如下。
contours为返回的轮廓。
hierarchy为返回的轮廓的层次结构。
image为原图像。
mode为轮廓的检索模式。
method为轮廓的近似方法。
offset为每个轮廓点移动的可选偏移量。
示例代码如下。

查找轮廓

import cv2
import numpy as np
img=cv2.imread('shapes.jpg') #读取图像
cv2.imshow('original',img) #显示原图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将其转换为灰度图像
ret,img2=cv2.threshold(gray,125,255,cv2.THRESH_BINARY) #二值化阈值处理
c,h=cv2.findContours(img2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #查找轮廓
print('轮廓:',c)
print('轮廓类型:',type(c))
print('轮廓个数:',len(c))
print('层次:',h)
print('层次类型:',type(h))
for n in(range(3)):
img3=np.zeros(img.shape, np.uint8)+255 #按原图大小创建一幅白色图像
cv2.polylines(img3,[c[n]],True,(255,0,0),2) #绘制轮廓
cv2.imshow('%s' % n,img3) #显示轮廓图像
cv2.waitKey(0) #按任意键结束等待
cv2.destroyAllWindows() #关闭所有窗口
1.cv2.findContours()函数返回结果
cv2.findContours()函数返回一个list对象,保存了轮廓数组。轮廓数组的每个元素都是一个表示轮廓的array对象;返回的轮廓层次是一个numpy.ndarray对象。
2.轮廓层次
根据轮廓的嵌套关系,可将轮廓之间的层次关系分为父级和子级,外部的轮廓为父级,内部的轮廓为子级。例如,图5-4所示的轮廓1是轮廓2的父级,轮廓0和轮廓1同级。
cv2.findContours()函数返回的轮廓层次中,numpy.ndarray对象中的每个元素表示的层次关系格式为:[下一个轮廓 前一个轮廓 第一个子级轮廓 父级轮廓]。例如,[-1 0 2 -1]中,-1表示不存在对应的轮廓,前一个轮廓在轮廓数组中的序号为0,第一个子级轮廓在轮廓数组中的序号为2。
3.轮廓的检索模式
cv2.findContours()函数中的mode参数用于设置轮廓的检索模式,不同检索模式下函数返回的轮廓有所不同。mode参数可设置为下列常数。
cv2.RETR_LIST:仅检索所有轮廓,不创建任何父子关系。
cv2.RETR_EXTERNAL:仅检索所有的外部轮廓,不包含子级轮廓。
cv2.RETR_CCOMP:检索所有轮廓并将它们排列为2级层次结构,所有的外部轮廓为1级,所有的子级轮廓为2级。
cv2.RETR_TREE:检索所有轮廓并创建完整的层次列表,如父级、子级、孙子级等。
4.轮廓的近似方法
cv2.findContours()函数中的method参数用于设置轮廓的近似方法,它用于决定如何确定轮廓包含的像素点。method参数可设置为下列常数。
cv2.CHAIN_APPROX_NONE:存储所有轮廓点,轮廓的任意两个相邻点是水平、垂直或对角线上的邻居。
cv2.CHAIN_APPROX_SIMPLE:只保存水平、垂直和对角线的端点。
cv2.CHAIN_APPROX_TC89_L1:应用Teh-Chin链逼近算法中的一种确定轮廓点。

目录
相关文章
查找并绘制轮廓
查找并绘制轮廓
46 0
|
18天前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
38 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
5月前
|
Python
查找轮廓
【6月更文挑战第25天】查找轮廓。
33 1
|
5月前
|
Web App开发 算法 Java
图像放缩之双线性内插值
图像放缩之双线性内插值
24 0
|
6月前
|
存储 计算机视觉 索引
【OpenCV】-查找并绘制轮廓
【OpenCV】-查找并绘制轮廓
|
12月前
图像查找
图像查找
66 0
|
定位技术
任意一张图片的CGCS2000坐标配准
任意一张图片的CGCS2000坐标配准
131 0
|
算法 Java 数据安全/隐私保护
二值图像分析之轮廓分析
二值图像分析之轮廓分析
457 0
二值图像分析之轮廓分析
|
Python
基于相同颜色连通像素个数的统计进行图像字符识别
无论是图像,音频的识别,不外乎是对各种特征(特征向量)进行统计归纳。 通过观察,发现这是一张简单的,非常有规律可循的图。 越有规律越容易进行分类。这里的思路就是自左至右依次对相同颜色的像素连通区进行像素个数统计,从而制成像素与字符对应的字典进行识别。
173 0
基于相同颜色连通像素个数的统计进行图像字符识别
|
机器学习/深度学习 人工智能 自然语言处理
生成模型:基于单张图片找到物体位置
机器人技术和自动驾驶的兴起驱使人们需要更好的机器视觉。
617 0