cv2.findContours()
是 OpenCV 库中用于查找图像轮廓的函数。它的使用方式如下:
contours, hierarchy = cv2.findContours(image, mode, method)
image
:输入的二值化图像,一般为灰度图像或二值图像。mode
:轮廓检测模式,指定轮廓的层级关系。常用的模式有:cv2.RETR_EXTERNAL
:只返回最外层的轮廓。cv2.RETR_LIST
:返回所有轮廓,不建立轮廓间的层级关系。cv2.RETR_TREE
:返回所有轮廓,并建立完整的层级关系。
method
:轮廓逼近方法,指定轮廓的表示方式。常用的方法有:cv2.CHAIN_APPROX_NONE
:保存所有的轮廓点。cv2.CHAIN_APPROX_SIMPLE
:仅保存轮廓的端点。cv2.CHAIN_APPROX_TC89_L1
和cv2.CHAIN_APPROX_TC89_KCOS
:应用 Teh-Chin 链逼近算法。
函数的返回值是一个包含轮廓信息的列表 contours
和一个描述轮廓的层级关系的数组 hierarchy
。其中,contours
是一个存储轮廓点坐标的列表,每个轮廓都是一个 NumPy 数组。hierarchy
是一个包含轮廓层级关系信息的多维数组,每个轮廓的层级关系由四个整数 [next, previous, first child, parent]
组成。
以下是一个示例代码,展示了如何使用 cv2.findContours()
查找图像的轮廓:
import cv2
# 读取图像,转为灰度图像
image = cv2.imread('image.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 进行图像二值化处理
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# 显示结果
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个示例中,首先读取一张图像并转为灰度图像,然后进行二值化处理。接下来使用 cv2.findContours()
函数查找轮廓,并将轮廓绘制在原始图像上。最后显示结果图像。
注意,如果使用 OpenCV 4.x 版本,cv2.findContours()
函数的返回值只有一个,不再返回 hierarchy
。可以通过传递一个额外的参数 _, contours, _ = cv2.findContours(...)
来获取轮廓列表。