举个cv2.findcontours返回值的例子
时间: 2023-10-08 17:08:55 浏览: 77
当使用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_SIMPLE)
# 显示轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,cv2.findContours()函数返回了轮廓和层次结构。轮廓是一个列表,其中每个元素都是一个数组,表示一条轮廓线。层次结构是一个numpy数组,表示每个轮廓的父子关系。
相关问题
cv2.findContours
### 回答1:
cv2.findContours是OpenCV中的一个函数,用于在二进制图像中查找轮廓。该函数需要传入二进制图像、轮廓查找模式和轮廓逼近方法等参数,返回轮廓和层次结构。
例如,可以使用cv2.threshold函数将图像二值化后,使用cv2.findContours函数找到图像中的所有轮廓,并对其进行处理或分析。常见的处理方法包括绘制轮廓、计算轮廓面积和周长等。
### 回答2:
cv2.findContours是OpenCV中的一个函数,用于在图像中查找轮廓。
在使用cv2.findContours函数之前,我们首先需要对输入的图像进行预处理。通常情况下,我们需要将图像转换为灰度图像,并进行二值化处理。
cv2.findContours函数的输入参数包括二值化的图像和轮廓查找模式。轮廓查找模式可以是cv2.RETR_EXTERNAL,表示只检测最外层的轮廓;也可以是cv2.RETR_LIST,表示检测所有的轮廓,并以简单的列表形式返回。
cv2.findContours函数的返回值包括轮廓列表和每个轮廓对应的层级。轮廓列表是一个包含所有轮廓的numpy数组。每个轮廓是一个由点组成的numpy数组,每个点表示轮廓的一个像素位置。
在使用cv2.findContours函数之后,我们可以对返回的轮廓进行进一步处理,例如计算每个轮廓的面积、周长等。
下面是一个使用cv2.findContours函数的例子:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 0, 255), 2)
# 显示图像
cv2.imshow("Contours", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这段代码首先读取图像,然后将图像转换为灰度图像,并进行二值化处理。接下来,使用cv2.findContours函数查找轮廓,并绘制在原始图像上。最后,显示包含轮廓的图像。
通过使用cv2.findContours函数,我们可以方便地在图像中查找轮廓,并进行后续的轮廓分析和处理。
cv2.findContours参数
cv2.findContours()函数是用于在二值图像中查找轮廓的函数。它的参数如下:
- 第一个参数是输入图像,必须是单通道的二值图像。
-二个参数是轮廓检索模式,有四种可选模式:cv2.RETR_EXTERNAL表示只检测外轮廓,cv2.RETR_LIST检测的轮廓不建立等级关系,cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息,如果内孔内还有一个连通物体,这个物体的边界也在顶层。cv2.RETR_TREE建立一个等级树结构的轮廓。
- 第三个参数是轮廓近似方法,有三种可选方法:cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(dx),abs(dy))==1,cv2.CHAIN_APPROX_SIMPLE压缩水平方向、垂直方向和对角线方向的元素,只保留端点,例如一个矩形轮廓只需4个点来保存轮廓信息,cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。
- 返回值有三个,第一个是轮廓本身,第二个是轮廓的层析结构,第三个是每个轮廓的近似值。
下面是一个cv2.findContours()的例子:
```python
import cv2
img = cv2.imread('example.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
```
阅读全文