cv2.findContours(img,mode,method)
时间: 2023-11-11 13:48:39 浏览: 39
cv2.findContours函数是OpenCV中用于检测图像中轮廓的函数。它的输入参数包括图像(img),轮廓检测模式(mode)和轮廓逼近方法(method)。该函数返回两个值:修改后的图像和找到的轮廓。
- 图像(img):输入的二值图像,一般是灰度图像或者使用阈值处理后得到的二值图像。
- 轮廓检测模式(mode):轮廓检测模式有三种可选:
- cv2.RETR_EXTERNAL: 只检测外部轮廓
- cv2.RETR_LIST: 检测所有轮廓,不建立任何父子关系
- cv2.RETR_TREE: 检测所有轮廓,并且建立完整的父子关系
- 轮廓逼近方法(method):轮廓逼近方法有四种可选:
- cv2.CHAIN_APPROX_NONE: 存储所有的轮廓点
- cv2.CHAIN_APPROX_SIMPLE: 压缩水平、垂直和对角线方向,只保留端点
- cv2.CHAIN_APPROX_TC89_L1: 使用Teague-Chen算法进行轮廓逼近
- cv2.CHAIN_APPROX_TC89_KCOS: 使用Teague-Chen算法进行轮廓逼近
相关问题
如何使用cv2.findContours
cv2.findContours是OpenCV中用于查找图像轮廓的函数。它的语法如下:
```
contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
```
其中,参数image是输入的二值图像,mode是轮廓检索模式,method是轮廓逼近方法。函数返回值包括轮廓列表和层次结构。
下面是一个简单的示例代码:
```
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), 3)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码读取一张图片,将其转换为灰度图像,然后进行二值化处理。接着使用cv2.findContours函数查找轮廓,并将轮廓绘制在原图上。
cv2.findContours
cv2.findContours是OpenCV中的一个函数,用于在二进制图像中查找轮廓。它返回一个轮廓列表以及每个轮廓的层次结构。该函数采用以下参数:
- image:输入图像(必须为二进制图像,即黑白图像)。
- mode:轮廓检索模式,可以是cv2.RETR_EXTERNAL(只检测最外层轮廓)、cv2.RETR_LIST(检测所有轮廓,不建立轮廓间的等级关系)、cv2.RETR_TREE(检测所有轮廓,建立轮廓间的等级关系)。
- method:轮廓逼近方法,可以是cv2.CHAIN_APPROX_NONE(存储所有的轮廓点)、cv2.CHAIN_APPROX_SIMPLE(仅存储轮廓的端点)。
- contours:输出参数,表示检测到的轮廓。
- hierarchy:输出参数,表示轮廓的层次结构。
例如,以下代码展示了如何使用cv2.findContours函数:
```
import cv2
# 读取图像
img = cv2.imread('image.png', 0)
# 二值化处理
ret, thresh = cv2.threshold(img, 127, 255, 0)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```