15.OpenCV的图像轮廓——查找轮廓
前言
图像轮廓是指由位于边缘、连续的、具有相同颜色和强度的点构成的曲线,它可以用于形状分析以及对象检测和识别。
一、查找轮廓
cv2.findContours()函数用于从二值图像中查找图像轮廓,其基本格式如下:
contours, hierarchy = cv2.findContours(image, mode, method[, offset])
contours为返回的轮廓
hierarchy为返回的轮廓层次结构
image为原图像
mode为轮廓的检索模式
method为轮廓的近似方法
offset为每个轮廓点移动的可选偏移量
img = cv2.imread('shapes.jpg')
cv2.imshow('shapes', img)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img_gray', img_gray)
ret, thresh = cv2.threshold(img_gray, 125, 255, cv2.THRESH_BINARY)
cv2.imshow('thresh', thresh)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_TC89_L1)
img1 = np.zeros(img.shape, np.uint8) + 255
cv2.polylines(img1, [contours[0]], True, (255,0,0), 2)
img2 = np.zeros(img.shape, np.uint8) + 255
cv2.polylines(img2, [contours[1]], True, (255,0,0), 2)
img3 = np.zeros(img.shape, np.uint8) + 255
cv2.polylines(img3, [contours[2]], True, (255,0,0), 2)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
print('轮廓:',contours)
print('轮廓类型:',type(contours))
print('轮廓个数:',len(contours))
print('层次:',hierarchy)
print('层次类型:',type(hierarchy))
1、cv2.findContours()函数返回结果
cv2.findContours()函数返回一个list对象,保存了轮廓数组。轮廓数组的每一个元素都是一个表示轮廓的array对象,返回的轮廓层次是一个numpy.ndarray对象。
2、轮廓层次
根据轮廓的嵌套关系,可将轮廓之间的层次关系分为父级和子级,外部的轮廓为父级,内部的轮廓为子级。
cv2.findContours()函数返回的轮廓层次中,numpy.ndarray对象中的每一个元素表示的层次关系为:[下一个轮廓 前一个轮廓 第一个子级轮廓 父级轮廓]。例如[-1 0 2 -1]中,-1表示不存在对应的轮廓,前一个轮廓在轮廓数组中的序号为0,第一个子级轮廓在轮廓数组中的序号为2.
3、轮廓的检索模式
检索模式mode | 说明 |
---|---|
cv2.RETR_LIST | 仅检索所有轮廓,不创建任何父子关系 |
cv2.RETR_EXTERNAL | 仅检索所有外部轮廓,不包含子级轮廓 |
cv2.RETR_CCOMP | 检索所有轮廓并将它们排列为2级层次结构,所有外轮廓为1级,所有子级轮廓为2级 |
cv2.RETR_TREE | 检索所有轮廓不创建完整的层次列表,如父级、子级、孙子级等 |
4、轮廓的近似方法
近似方法method | 说明 |
---|---|
cv2.CHAIN_APPROX_NONE | 存储所有轮廓点,轮廓的任意两个相邻点是水平、垂直或对角线上的邻居 |
cv2.CHAIN_APPROX_SIMPLE | 只保存水平、垂直和对角线的端点 |
cv2.CHAIN_APPROX_TC89_L1 | 应用Teh-Chin链逼近算法中的一种确定轮廓点 |
二、OpenCV-Python资源下载
OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码
总结
以上内容介绍了OpenCV-Python的查找轮廓操作,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。
版权声明:本文为weixin_43843069原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。