opencv findContours 怎么使用
时间: 2023-08-04 22:25:56 浏览: 86
`findContours` 是一个在 OpenCV 中用于查找轮廓的函数。它的使用方法如下:
1. 首先,定义一个二值化图像(例如灰度图像或二进制图像),并确保该图像已经进行了阈值化处理。
2. 然后,使用 `findContours` 函数来查找图像中的轮廓。该函数的语法如下:
```
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
```
其中,参数意义如下:
- `image`:输入的二值化图像。
- `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`:应用了 Tchebychev 距离或 K 型距离的逼近方法。
- `contours`:输出参数,存储检测到的轮廓。
- `hierarchy`:输出参数,存储轮廓之间的层次关系。
- `offset`:可选的偏移量,用于调整轮廓位置。
3. 最后,可以使用 `drawContours` 函数将轮廓绘制到原始图像上。该函数的语法如下:
```
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])
```
其中,参数意义如下:
- `image`:要绘制轮廓的原始图像。
- `contours`:要绘制的轮廓。
- `contourIdx`:要绘制的轮廓索引。如果为负数,则绘制所有的轮廓。
- `color`:绘制轮廓的颜色。
- `thickness`:轮廓线条的粗细。如果为负数,则表示填充轮廓内部。
- `lineType`:绘制轮廓线条的类型。
- `hierarchy`:轮廓的层次结构。
- `maxLevel`:绘制的轮廓的最大层级。
- `offset`:可选的偏移量,用于调整轮廓位置。
下面是一个简单的示例代码,用于演示如何使用 `findContours` 函数查找并绘制图像中的轮廓:
```
import cv2
# 读取图像
img = cv2.imread('image.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), 2)
# 显示图像
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取一张图像,然后将其转换为灰度图像,并进行二值化处理。接着,使用 `findContours` 函数查找轮廓,并将其存储在 `contours` 变量中。最后,使用 `drawContours` 函数将轮廓绘制到原始图像上,并显示结果。
阅读全文