opencv实现提取图像轮廓
时间: 2023-11-07 10:57:50 浏览: 65
OpenCV提供了cv2.findContours()函数来寻找图像的轮廓。该函数有三个参数:输入图像、轮廓检索模式和轮廓逼近方法。输出是一个包含轮廓的列表和一个包含层次结构的数组。
下面是一个简单的示例代码,演示如何使用cv2.findContours()函数来提取图像轮廓:
```
import cv2
# 读取输入图像
img = cv2.imread('input.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行二值化处理
ret, thresh = cv2.threshold(gray, 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('Contours', img)
cv2.waitKey(0)
```
在上面的代码中,我们首先读取输入图像并将其转换为灰度图像。然后我们对灰度图像进行二值化处理。接下来,我们使用cv2.findContours()函数来找到图像的轮廓。最后,我们使用cv2.drawContours()函数来绘制轮廓,并将结果显示在屏幕上。
注意,cv2.findContours()函数的第二个参数指定轮廓检索模式。有四种模式可供选择:cv2.RETR_EXTERNAL、cv2.RETR_LIST、cv2.RETR_CCOMP和cv2.RETR_TREE。在本示例中,我们使用了cv2.RETR_TREE模式,它会返回所有轮廓,并且每个轮廓都有其自己的父子关系。
cv2.findContours()函数的第三个参数指定轮廓逼近方法。有三种方法可供选择:cv2.CHAIN_APPROX_NONE、cv2.CHAIN_APPROX_SIMPLE和cv2.CHAIN_APPROX_TC89_L1。在本示例中,我们使用了cv2.CHAIN_APPROX_SIMPLE方法,它会仅保留轮廓的端点。