contours,hierarchy=cv2.findContours
时间: 2023-10-08 14:10:34 浏览: 52
这是一个常见的OpenCV函数,用于在图像中查找轮廓。它接受一个二值图像作为输入,并返回找到的轮廓列表以及层次结构。
具体来说,`cv2.findContours()`函数的输入参数是一个二值图像,可以通过阈值处理等方法得到。函数会对图像进行处理,并返回两个输出值:contours和hierarchy。
- contours是一个包含所有找到的轮廓的列表。每个轮廓由一系列表示轮廓上点的坐标组成。
- hierarchy是一个表示轮廓之间关系的数组。它可以帮助我们理解轮廓之间的嵌套关系和层次结构。
使用这些返回值,我们可以对轮廓进行各种操作,如绘制、计算面积或周长、获取轮廓的几何特征等。
需要注意的是,`cv2.findContours()`函数会修改输入的图像,因此在调用之前最好创建输入图像的副本,以免原始图像被改变。
相关问题
contours, hierarchy = cv2.findContours
`cv2.findContours()`是一个在图像中查找轮廓的函数。它的语法如下:
```python
contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
```
其中,参数`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`和`cv2.CHAIN_APPROX_TC89_KCOS`:使用Teh-Chin链逼近算法中的一种。
函数返回值`contours`是一个包含所有轮廓的列表,每个轮廓都是一个包含(x,y)坐标的数组。`hierarchy`是可选的输出向量,其中包含有关图像拓扑的信息。
下面是一个使用`cv2.findContours()`函数查找轮廓的例子:
```python
import cv2
# 读取图像
img = cv2.imread('example.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_NONE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
contours, hierarchy = cv2.findContours(thresh, 1, 2)是什么含义
### 回答1:
cv2.findContours()是OpenCV的一个函数,用于在二值化图像中查找轮廓(contours)。这个函数会返回两个值,第一个是轮廓本身,第二个是轮廓的层级信息(hierarchy)。在该函数的参数中,thresh是要查找轮廓的二值化图像,1表示查找所有轮廓,2表示建立轮廓层级。
### 回答2:
contours, hierarchy = cv2.findContours(thresh, 1, 2)表示使用OpenCV库中的函数cv2.findContours()对二值化图像thresh进行轮廓检测,并将检测到的轮廓信息保存在contours和hierarchy变量中。
具体解释如下:
- cv2.findContours()是OpenCV库中的一个图像处理函数,用于检测图像中的轮廓。
- 参数thresh是一个二值化的图像,表示要对该图像进行轮廓检测。
- 第二个参数(1)表示轮廓检测模式,常见的模式有三种:
- cv2.RETR_EXTERNAL: 只检测最外层的轮廓。
- cv2.RETR_LIST: 检测所有的轮廓,并将它们保存在一个列表中,不建立轮廓的等级关系。
- cv2.RETR_TREE: 检测所有的轮廓,并重建轮廓的等级关系。
- 第三个参数(2)表示轮廓的近似方法,常见的方法有三种:
- cv2.CHAIN_APPROX_NONE: 保存所有的轮廓点。
- cv2.CHAIN_APPROX_SIMPLE: 仅保存轮廓的起始点、结束点、以及它们之间的距离。
- cv2.CHAIN_APPROX_TC89_L1、cv2.CHAIN_APPROX_TC89_KCOS: 使用Te_Chinl chain逼近算法。
- 返回值contours是一个列表,保存了检测到的所有轮廓的信息,每个轮廓由一组点的坐标表示。
- 返回值hierarchy是一个包含轮廓之间关系的多维数组,用于描述轮廓的层级关系。每个轮廓的层级关系包括它的父轮廓、下一个兄弟轮廓、第一个子轮廓和外层轮廓的索引。
总而言之,cv2.findContours()函数可用于检测图像中的轮廓,并通过返回值contours和hierarchy来存储轮廓的信息和层级关系。
### 回答3:
`cv2.findContours()`是OpenCV中一个函数,用于从二值图像中查找轮廓(contours)。
函数的参数含义如下:
- `thresh`:要查找轮廓的二值图像。
- `1`:轮廓的查找方法。传入`1`表示使用轮廓树的方法查找轮廓。
- `2`:轮廓的近似方法。传入`2`表示对查找到的轮廓进行全局逼近。
函数的返回值是一个包含两个元素的元组。第一个元素`contours`是一个Python列表,包含了找到的轮廓。轮廓是一组以点的坐标表示的曲线。每个轮廓都以一个Numpy数组的形式表示,其中每一行都是一个点的坐标。第二个元素`hierarchy`是一个包含了轮廓之间关系的Numpy数组。它表示了轮廓的层级结构,可以用于分析轮廓之间的关系。
因此,`contours, hierarchy = cv2.findContours(thresh, 1, 2)`的含义是使用轮廓树的方法和全局逼近的方式,在给定的二值图像`thresh`中查找轮廓,并将找到的轮廓和轮廓层级关系保存在`contours`和`hierarchy`变量中。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)