cv2.findContours() 返回值
时间: 2024-07-14 07:01:27 浏览: 225
`cv2.findContours()` 是 OpenCV 中的一个函数,用于在二进制图像中查找轮廓。该函数通常用于形状检测、物体识别等计算机视觉任务。它的返回值是一个包含三个元素的元组:
1. **contours**: 这是一个列表,包含了找到的所有轮廓信息。每个轮廓都是一个二维数组,表示轮廓的边界点顺序。
2. **hierarchy**: 这是一个嵌套列表,描述了轮廓之间的层次关系。它包含了四个级别的信息:`level`, `parent`, `next`, 和 `previous`。`level` 指的是轮廓在整个轮廓结构中的层级,`parent` 表示当前轮廓的直接父轮廓,`next` 和 `previous` 分别指向下一级别的下一个和上一个轮廓。
3. **image\_contours**: 如果在原始图像上调用 findContours,并且参数设置为 True,则这个值会是输入的原图像,而不是处理后的结果。
需要注意的是,如果在灰度图像上寻找轮廓,需要先通过 `cv2.threshold()` 或其他方法将其转换为二进制图像。另外,由于历史版本的差异,`findContours` 的某些参数和返回值格式可能会有所不同。
相关问题
cv2.findContours的参数以及返回值
cv2.findContours() 是 OpenCV 中用于在二值图像中查找轮廓的函数。它的语法如下:
```
contours, hierarchy = cv2.findContours(image, mode, method, offset)
```
其中,参数含义如下:
- `image`:输入二值图像,要求为灰度图像,即只有 0 和 255 两种像素值。
- `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`:使用 Tang-Chen 算法进行逼近。
- `offset`:可选参数,表示轮廓坐标点的偏移量。
返回值:
- `contours`:检测到的轮廓,是一个包含所有轮廓的列表,每个轮廓由一组点坐标表示;
- `hierarchy`:轮廓之间的层次关系,是一个包含每个轮廓的父子关系、前后关系等信息的列表。
cv2.findContours输入参数与返回值
cv2.findContours是OpenCV中用于查找图像轮廓的函数。它的输入参数是二值化图像,输出是轮廓信息和层次结构。
具体来说,cv2.findContours函数的输入参数包括:
- image:输入的二值化图像,要求为8位单通道图像。
- 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。
- contours:检测到的轮廓信息,是一个Python列表,每个元素都是一个轮廓,每个轮廓由若干个点组成。
- hierarchy:轮廓的层次结构信息,也是一个Python列表,每个元素都是一个四元组(hierarchy[i], hierarchy[i][1], hierarchy[i], hierarchy[i]),其中hierarchy[i]、hierarchy[i]、hierarchy[i]和hierarchy[i]分别表示第i个轮廓的后一个轮廓、前一个轮廓、子轮廓和父轮廓的索引。
下面是一个示例代码:
```
import cv2
# 读入图像并转换为灰度图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化图像
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文