cv2.findContours函数的用法
时间: 2023-09-13 17:09:19 浏览: 117
Python通过OpenCV的findContours获取轮廓并切割实例
5星 · 资源好评率100%
cv2.findContours函数用于在二值图像中查找轮廓。
函数原型如下:
```python
contours, hierarchy = cv2.findContours(image, mode, method)
```
参数解释:
- `image`:输入的二值图像,通常是经过阈值处理后得到的图像。
- `mode`:轮廓的检索模式,指定轮廓的层级关系。常用的模式有:
- `cv2.RETR_EXTERNAL`:只检测最外层的轮廓。
- `cv2.RETR_LIST`:检测所有轮廓,不建立层级关系。
- `cv2.RETR_TREE`:检测所有轮廓,建立完整的层级关系。
- `method`:轮廓的近似方法。常用的方法有:
- `cv2.CHAIN_APPROX_SIMPLE`:压缩水平、垂直和对角线方向上的冗余点,仅保留端点。
- `cv2.CHAIN_APPROX_NONE`:保留所有轮廓的点。
返回值:
- `contours`:返回的轮廓列表,每个轮廓由一组点表示。
- `hierarchy`:轮廓的层级关系,可以用于分析轮廓之间的关系。
示例代码:
```python
import cv2
# 读取图像并进行阈值处理
image = cv2.imread('image.jpg', 0) # 以灰度图像方式读取
retval, threshold = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 在原图上绘制轮廓
image_with_contours = cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# 显示结果
cv2.imshow('Contours', image_with_contours)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上代码首先读取一张灰度图像,并进行阈值处理得到二值图像。然后使用cv2.findContours函数查找轮廓,指定检测最外层轮廓的模式和仅保留端点的近似方法。最后,在原图上绘制轮廓并显示结果。
阅读全文