contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)这段代码的含义
时间: 2024-05-18 18:15:47 浏览: 59
这段代码使用OpenCV库中的cv2.findContours函数来查找图像中的轮廓(contours)。其中,第一个参数是二值化图像(thresh),第二个参数是轮廓检索模式(RETR_EXTERNAL表示只检测外轮廓),第三个参数是轮廓逼近方法(CHAIN_APPROX_SIMPLE表示轮廓点的存储方式,只保留轮廓的拐点信息,以减少存储空间)。函数返回两个值,第一个是轮廓的列表(contours),第二个是每个轮廓的层级关系(hierarchy)。
相关问题
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)
```
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()
```
阅读全文