介绍cv2.findContours
时间: 2023-07-02 07:20:31 浏览: 72
`cv2.findContours` 是 OpenCV 中用于查找图像轮廓的函数,它可以在二值化图像中查找所有的连通轮廓,返回轮廓的点集和层次结构信息。 `cv2.findContours` 的输入参数包括:
- `image`:需要查找轮廓的二值化图像,通常为灰度图像或者二值图像。
- `mode`:轮廓查找模式,可以为 `cv2.RETR_EXTERNAL`(只检测外轮廓)、`cv2.RETR_LIST`(检测所有轮廓,不建立层次关系)等。
- `method`:轮廓逼近方法,可以为 `cv2.CHAIN_APPROX_NONE`(保存所有轮廓点)、`cv2.CHAIN_APPROX_SIMPLE`(压缩水平、垂直、对角线方向的点,仅保留端点)等。
`cv2.findContours` 的输出结果是一个三元组 `(contours, hierarchy, ret)`,其中:
- `contours`:表示检测到的轮廓的点集,是一个列表,每个元素都是一个 Numpy 数组,表示一个轮廓。
- `hierarchy`:表示轮廓的层次结构,是一个 Numpy 数组,每行的四个元素表示当前轮廓的后一个轮廓、前一个轮廓、第一个子轮廓和父轮廓。
- `ret`:表示是否成功检测到轮廓的标志,如果成功则为 True,否则为 False。
可以使用 `cv2.drawContours` 函数在图像上绘制检测到的轮廓,也可以使用 `cv2.boundingRect` 函数计算轮廓的边界矩形或者最小包围矩形等形状信息。
相关问题
cv2. findContours
cv2.findContours是OpenCV中的一个函数,用于在图像中查找轮廓。它可以通过图像的边缘信息来检测对象或形状的轮廓。
该函数的语法如下:
contours, hierarchy = cv2.findContours(image, mode, method)
参数解释:
- image:输入的二值图像(通常为灰度图像或二值图像)。
- mode:轮廓检测模式。有四种可选模式:
- cv2.RETR_EXTERNAL:只检测最外层的轮廓。
- cv2.RETR_LIST:检测所有轮廓并存储为列表。
- cv2.RETR_CCOMP:检测所有轮廓并将其组织为两个层次结构的列表。顶层是外部边界,第二层是孔的边界。
- cv2.RETR_TREE:检测所有轮廓并将其组织为树状结构。
- method:轮廓逼近方法。有三种可选方法:
- cv2.CHAIN_APPROX_NONE:存储所有轮廓点。
- cv2.CHAIN_APPROX_SIMPLE:仅存储端点。
- cv2.CHAIN_APPROX_TC89_L1、cv2.CHAIN_APPROX_TC89_KCOS:应用Teh-Chin链逼近算法。
函数返回两个值:
- contours:检测到的轮廓,每个轮廓由一系列点组成(以numpy数组表示)。
- hierarchy:轮廓的层次结构,可以用于解释轮廓之间的关系(如父子关系等)。
cv2.findContours
cv2.findContours是OpenCV中的一个函数,用于在二进制图像中查找轮廓。它返回一个轮廓列表以及每个轮廓的层次结构。该函数采用以下参数:
- image:输入图像(必须为二进制图像,即黑白图像)。
- mode:轮廓检索模式,可以是cv2.RETR_EXTERNAL(只检测最外层轮廓)、cv2.RETR_LIST(检测所有轮廓,不建立轮廓间的等级关系)、cv2.RETR_TREE(检测所有轮廓,建立轮廓间的等级关系)。
- method:轮廓逼近方法,可以是cv2.CHAIN_APPROX_NONE(存储所有的轮廓点)、cv2.CHAIN_APPROX_SIMPLE(仅存储轮廓的端点)。
- contours:输出参数,表示检测到的轮廓。
- hierarchy:输出参数,表示轮廓的层次结构。
例如,以下代码展示了如何使用cv2.findContours函数:
```
import cv2
# 读取图像
img = cv2.imread('image.png', 0)
# 二值化处理
ret, thresh = cv2.threshold(img, 127, 255, 0)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```