opencv 轮廓查找函数介绍
时间: 2023-07-04 20:11:27 浏览: 119
OpenCV 中的轮廓查找函数可以帮助我们在图像中找到物体的边缘轮廓。常用的函数是 `findContours`。下面是函数的一些介绍:
函数原型:`cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])`
参数说明:
- `image`: 输入的二值图像,一般为灰度图像,可以使用函数 `cv2.threshold()` 进行二值化处理。
- `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-Chinl chain 近似算法中的一种。
- `contours`: 输出的轮廓,每个轮廓都是一个包含轮廓上所有点的 numpy 数组。
- `hierarchy`: 轮廓的层次结构信息,可用于检查轮廓之间的关系。
- `offset`: 对轮廓进行平移的偏移量。
使用示例:
```python
import cv2
# 读取图像,转换为灰度图像并进行二值化处理
img = cv2.imread('image.png')
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.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码会将图像中的轮廓绘制出来,并显示在窗口中。
阅读全文