cv2.findContours opencv轮廓提取

原文地址:https://blog.csdn.net/vclearner2/article/details/120776685

contours, hierarchy = cv2.findContours(img, mode, method)

img: 单通道二值图。(白色是前景,黑色是背景)
mode: 轮廓返回模式。
              (1)RETR_EXTERNAL, 只返回外轮廓
              (2)RETR_LIST, 返回所有轮廓,不建立等级关系
              (3)RETR_CCOMP,返回所有轮廓,建立两层等级结构
              (4)RETR_TREE,返回所有轮廓,建立完整的等级结构
method: 轮廓存储方式。
              (1)CHAIN_APPROX_NONE, 返回所有轮廓点
              (2)CHAIN_APPROX_SIMPLE, 只保存轮廓的角点
              (3)CHAIN_APPROX_TC89_L1
              (3)CHAIN_APPROX_TC89_KCOS

contours: 轮廓列表。
hierarchy: 轮廓等级。
hierarchy以[前,后,子,父]的顺序,存储轮廓索引。

一. 示例

1. 只提取外轮廓

contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

hierarchy返回值:

序号
0-1-1-1
12  -1-1
2-1 1-1-1

2. 返回所有轮廓,不建立等级关系

contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

hierarchy返回值:

序号
01-1-1-1
120-1-1
231-1-1
342-1-1
9-18-1-1

3. 返回所有轮廓,建立二层等级关系

contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)

hierarchy返回值:

序号
02-11-1
1-1-1-10
2403-1
3-1-1-12
4625-1
5-1-1-14
6-147-1
78-1-16
897-16
9-18-16

4. 返回所有轮廓,建立完整等级关系

contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

hierarchy返回值:

序号
04-11-1
1-1-120
2-1-131
3-1-1-12
4605-1
5-1-1-14
6-147-1
78-1-16
897-16
9-18-16