opencv findContours 使用方法
时间: 2023-08-31 07:23:37 浏览: 138
Python通过OpenCV的findContours获取轮廓并切割实例
4星 · 用户满意度95%
### 回答1:
`findContours`是OpenCV中的一个函数,用于在二进制图像中找到轮廓。
函数的基本语法为:
```
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`:使用TECHNIQUE L1进行轮廓逼近
- `cv2.CHAIN_APPROX_TC89_KCOS`:使用TECHNIQUE KCOS进行轮廓逼近
- `contours`:输出参数,包含检测到的轮廓信息,每个轮廓由点的坐标组成
- `hierarchy`:输出参数,表示轮廓之间的层次结构关系
- `offset`:可选参数,指定轮廓点的偏移量
使用示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg', 0)
# 二值化图像
ret, thresh = cv2.threshold(img, 127, 255, 0)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
img_contours = cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
# 显示结果
cv2.imshow('Contours', img_contours)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先读取一张图像,然后对其进行二值化处理。接着,使用`findContours`函数查找轮廓,得到轮廓点的坐标,以及轮廓之间的层次结构关系。最后,使用`drawContours`函数将轮廓绘制到图像上,并显示结果。
### 回答2:
opencv是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉算法。其中的findContours函数用于在二值图像中查找轮廓。
使用findContours函数的步骤如下:
1. 将图像转换为灰度图像或二值图像。可以使用cvtColor函数将彩色图像转换为灰度图像,也可以使用阈值化函数(如threshold、adaptiveThreshold等)将灰度图像转换为二值图像。
2. 创建一个空的输出向量,用于存储找到的轮廓。可以使用vector<vector<Point>>类型的变量来存储轮廓,其中每个轮廓由一系列的点组成。
3. 调用findContours函数来查找图像中的轮廓。函数的参数包括输入图像、轮廓存储变量、轮廓的提取方式等。常用的提取方式有RETR_EXTERNAL(提取最外层的轮廓)和RETR_TREE(提取所有的轮廓,并建立轮廓之间的层级关系)。
4. 可选地,可以对找到的轮廓进行处理。可以使用approxPolyDP函数对轮廓进行多边形近似,可以使用boundingRect函数获取轮廓的外接矩形,还可以使用drawContours函数将轮廓绘制在原始图像上。
5. 最后,可以使用imshow函数显示处理后的图像,或者使用imwrite函数将图像保存到文件中。
需要注意的是,findContours函数使用的图像必须是二值图像。在调用函数之前,需要确保进行了适当的图像预处理,以便得到正确的图像结果。
总之,通过使用findContours函数,可以方便地在图像中查找轮廓,并进行各种处理,以满足不同的计算机视觉需求。
阅读全文