查找图像轮廓

简介: 【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链逼近算法中的一种确定轮廓点。

目录
相关文章
|
10月前
查找并绘制轮廓
查找并绘制轮廓
43 0
|
3月前
|
Python
查找轮廓
【6月更文挑战第25天】查找轮廓。
28 1
|
3月前
|
算法 计算机视觉 Python
使用分水岭算法分割图像
【6月更文挑战第4天】使用分水岭算法分割图像。
418 4
|
3月前
|
Web App开发 算法 Java
图像放缩之双线性内插值
图像放缩之双线性内插值
21 0
|
4月前
|
存储 计算机视觉 索引
【OpenCV】-查找并绘制轮廓
【OpenCV】-查找并绘制轮廓
|
4月前
[Halcon&图像] 图像、区域和轮廓相互转化
[Halcon&图像] 图像、区域和轮廓相互转化
247 1
|
10月前
图像查找
图像查找
63 0
|
11月前
|
定位技术
任意一张图片的CGCS2000坐标配准
任意一张图片的CGCS2000坐标配准
118 0
|
计算机视觉
opencv 之图像的边界填充及一些数据计算
opencv 之图像的边界填充及一些数据计算
|
计算机视觉
图像的点云拼接
理解好图像的点云拼接,需要从相机的模型说起。理解相机的成像原理之后。 便可更为深刻的理解 图像的点云 如何拼接在一起。
图像的点云拼接