cv2.findContours
时间: 2023-07-02 13:08:17 浏览: 64
`cv2.findContours()` 是一个用于在二进制图像中查找轮廓的函数。它接受一个二进制图像作为输入,并返回一个轮廓列表和层次结构。该函数可以用于图像分割、形状匹配、物体检测等应用。
使用方法如下:
```
contours, hierarchy = cv2.findContours(image, mode, method)
```
其中,`image` 是二进制图像,`mode` 是轮廓检测模式,`method` 是轮廓逼近方法。`contours` 是包含所有轮廓的列表,每个轮廓是一个包含点坐标的 numpy 数组。`hierarchy` 是层次结构数组,用于描述轮廓之间的关系。
轮廓检测模式有以下几种:
- `cv2.RETR_EXTERNAL`:只检测外部轮廓。
- `cv2.RETR_LIST`:检测所有轮廓,不建立轮廓间的层次关系。
- `cv2.RETR_CCOMP`:检测所有轮廓,建立两层层次结构。
- `cv2.RETR_TREE`:检测所有轮廓,建立完整的层次结构树。
轮廓逼近方法有以下几种:
- `cv2.CHAIN_APPROX_NONE`:保存所有的轮廓点。
- `cv2.CHAIN_APPROX_SIMPLE`:仅保存轮廓的端点。
- `cv2.CHAIN_APPROX_TC89_L1`和`cv2.CHAIN_APPROX_TC89_KCOS`:使用 Teh-Chinl 标准的链式逼近算法。
相关问题
contours, hierarchy = cv2.findContours(skeleton, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2:]
这段代码使用了 Python 的扩展切片(extended slicing)语法,即 `[-2:]`,表示从返回值的倒数第二个元素开始取到最后一个元素。因为 `cv2.findContours` 函数的返回值可能是两个或三个,所以这种语法可以确保只获取到前两个元素,而忽略掉可能存在的第三个元素。
具体来说,这段代码等价于以下两行代码:
```
retval = cv2.findContours(skeleton, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours, hierarchy = retval[-2:]
```
其中,`retval` 是 `cv2.findContours` 函数的返回值,`retval[-2:]` 表示获取 `retval` 的倒数第二个和最后一个元素,即 `contours` 和 `hierarchy`。
使用这种写法可以确保代码的健壮性,即使 `cv2.findContours` 函数返回的元素数量发生了变化,也可以正确获取到需要的值。
contours, hierarchy = cv2.findContours(img_edge2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
这是一个使用 OpenCV 库中的 findContours 函数来查找图像轮廓的代码行。其中 img_edge2 是输入图像,RETR_TREE 是轮廓检索模式,CHAIN_APPROX_SIMPLE 是轮廓逼近方法。该函数将返回两个值,一个是轮廓数组,另一个是轮廓的层次结构。
阅读全文