cv2.findContours() 返回值contours的索引
时间: 2024-07-14 15:01:27 浏览: 114
`cv2.findContours()` 是 OpenCV 中用于查找图像轮廓(contours)的一个函数。这个函数返回两个值:contours 和 hierarchy。其中 contours 是一个二维列表,每个元素代表一个轮廓,轮廓是一个 Mx2 的 numpy 数组,表示轮廓上的点集合,M 是轮廓上的点数。
当 `findContours()` 找到轮廓时,contours 列表的索引通常对应于轮廓在原始图像中的顺序,从左上角开始按逆时针方向存储。也就是说,第一个轮廓通常是图像中的第一个找到的,第二个轮廓紧随其后,依此类推。
hierarchy 另外是一个数组,它包含了关于轮廓之间的层次结构信息,但在这个简单的说明中,我们重点讨论 contours 的索引。如果你只需要轮廓本身,可以直接通过索引来访问,如 `contours[i]` 就可以获取第 i 个轮廓的信息。
相关问题
cv2.findContours三个返回值
`cv2.findContours()` 函数是 OpenCV 中用于寻找图像轮廓的方法。它通常用于形状检测和分析。这个函数有三个可能的返回值:
1. **contours**: 这是最主要的返回值,是一个二维列表,每个元素表示一个轮廓的边界点列表,按照从左上到右下的顺序存储。
2. **hierarchy**: 这个可选值是一个二维列表,包含了一些额外的信息关于轮廓之间的关系。每一行代表一个轮廓,并由四个整数构成:
- 第0个元素是轮廓的索引
- 第1个元素描述了轮廓是否在另一个轮廓内部
- 第2个元素如果是-1,则表示没有父轮廓;否则是指向父轮廓的索引
- 第3个元素描述了轮廓的孩子轮廓的索引,如果有的话
3. **ret**: 一个布尔值,表示查找操作是否成功。如果 `ret` 为 `True`,说明找到轮廓并且上述两个值都是有效的;如果 `False`,可能是由于一些错误导致无法找到轮廓。
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()
```
阅读全文