1.轮廓查找 findContours
contours, hierarchy = cv2.findContours(image, mode, method)返回值
contours:列表,存储所有轮廓每一个轮廓是一组坐标点数组(N,1,2),代表一条闭合曲线。hierarchy:层级数组,记录轮廓父子嵌套关系,仅层级模式需要。
参数
image必须是二值图(0 黑,255 白,白色为前景轮廓); 推荐前置:灰度→二值化 / Canny 边缘图。
mode 轮廓检索模式
表格
模式 抓取范围 层级结构 常用场景 RETR_EXTERNAL 仅最外层轮廓 无层级 物体检测、计数、框选(首选) RETR_LIST 所有轮廓 无层级 单纯统计轮廓总数 RETR_CCOMP 外层 + 紧邻孔洞 仅限 2 层 区分物体与内部孔洞 RETR_TREE 全部轮廓 完整树形多层嵌套 复杂多层镂空图形分析 method 轮廓逼近方式
表格
常量 作用 特点 cv2.CHAIN_APPROX_NONE存储轮廓所有像素点 点极多,占用内存大 cv2.CHAIN_APPROX_SIMPLE压缩拐点,只存顶点 只保留拐角坐标,大幅精简,日常首选
2.轮廓绘制
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType=None, hierarchy=None, maxLevel=None, offset=None)核心常用参数
- image绘制画布,建议传入原图副本,不要直接修改原图;格式:BGR 彩色图。
- contours
findContours得到的轮廓列表。 - contourIdx
- 填数字:绘制第 N 个轮廓;
- 填
-1:一次性绘制全部轮廓。
- colorBGR 格式颜色元组: 红色
(0,0,255)、绿色(0,255,0)、蓝色(255,0,0)、白色(255,255,255)、黑色(0,0,0)。 - thickness
- 正数:轮廓线条粗细;
-1:把轮廓围成的区域内部全部填充。
3.轮廓的面积与周长
一、轮廓面积:cv2.contourArea(contour)
作用
计算单个闭合轮廓包围区域的像素面积。
参数
contour:单条轮廓(contours列表里其中一个元素)
二、轮廓周长:cv2.arcLength(contour, closed)
作用
计算轮廓边线的像素长度。
参数
contour:单条轮廓;closed:布尔值True:闭合轮廓(首尾相连,日常绝大多数场景用 True)False:开放曲线,不闭合。
4.多边形逼近与凸包
approx = cv2.approxPolyDP(curve, epsilon, closed)参数
- curve:单条原始轮廓
cnt - epsilon:逼近精度,最重要参数含义:原始轮廓与拟合多边形最大允许距离; 常用写法:
epsilon = 0.02 * cv2.arcLength(cnt, True)epsilon 越大,顶点越少、图形越粗糙;越小越贴近原图。 - closed:
True=闭合多边形,False=开放折线
hull = cv2.convexHull(points, clockwise=False, returnPoints=True)参数
- points:轮廓点集合(单条轮廓 cnt)
- returnPoints:默认 True,返回凸包顶点坐标;False 返回点索引
5.外接矩阵
| 函数 | 形状 | 能否旋转 | 紧凑程度 | 适用场景 |
|---|---|---|---|---|
| boundingRect | 正矩形 | 不可旋转 | 松散 | 常规框选、快速定位 |
| minAreaRect | 斜矩形 | 可旋转 | 最紧凑 | 倾斜物体定位 |
| minEnclosingCircle | 圆形 | 无旋转 | 适中 | 圆形目标检测 |
rect = cv2.minAreaRect(contour)返回值
rect = ((cx, cy), (w, h), angle)
(cx,cy):矩形中心点坐标(w,h):矩形宽、高angle:旋转倾斜角度
1.轮廓查找 findContours
contours, hierarchy = cv2.findContours(image, mode, method)返回值
contours:列表,存储所有轮廓每一个轮廓是一组坐标点数组(N,1,2),代表一条闭合曲线。hierarchy:层级数组,记录轮廓父子嵌套关系,仅层级模式需要。
参数
image必须是二值图(0 黑,255 白,白色为前景轮廓); 推荐前置:灰度→二值化 / Canny 边缘图。
mode 轮廓检索模式
表格
模式 抓取范围 层级结构 常用场景 RETR_EXTERNAL 仅最外层轮廓 无层级 物体检测、计数、框选(首选) RETR_LIST 所有轮廓 无层级 单纯统计轮廓总数 RETR_CCOMP 外层 + 紧邻孔洞 仅限 2 层 区分物体与内部孔洞 RETR_TREE 全部轮廓 完整树形多层嵌套 复杂多层镂空图形分析 method 轮廓逼近方式
表格
常量 作用 特点 cv2.CHAIN_APPROX_NONE存储轮廓所有像素点 点极多,占用内存大 cv2.CHAIN_APPROX_SIMPLE压缩拐点,只存顶点 只保留拐角坐标,大幅精简,日常首选
2.轮廓绘制
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType=None, hierarchy=None, maxLevel=None, offset=None)核心常用参数
- image绘制画布,建议传入原图副本,不要直接修改原图;格式:BGR 彩色图。
- contours
findContours得到的轮廓列表。 - contourIdx
- 填数字:绘制第 N 个轮廓;
- 填
-1:一次性绘制全部轮廓。
- colorBGR 格式颜色元组: 红色
(0,0,255)、绿色(0,255,0)、蓝色(255,0,0)、白色(255,255,255)、黑色(0,0,0)。 - thickness
- 正数:轮廓线条粗细;
-1:把轮廓围成的区域内部全部填充。
3.轮廓的面积与周长
一、轮廓面积:cv2.contourArea(contour)
作用
计算单个闭合轮廓包围区域的像素面积。
参数
contour:单条轮廓(contours列表里其中一个元素)
二、轮廓周长:cv2.arcLength(contour, closed)
作用
计算轮廓边线的像素长度。
参数
contour:单条轮廓;closed:布尔值True:闭合轮廓(首尾相连,日常绝大多数场景用 True)False:开放曲线,不闭合。
4.多边形逼近与凸包
approx = cv2.approxPolyDP(curve, epsilon, closed)参数
- curve:单条原始轮廓
cnt - epsilon:逼近精度,最重要参数含义:原始轮廓与拟合多边形最大允许距离; 常用写法:
epsilon = 0.02 * cv2.arcLength(cnt, True)epsilon 越大,顶点越少、图形越粗糙;越小越贴近原图。 - closed:
True=闭合多边形,False=开放折线
hull = cv2.convexHull(points, clockwise=False, returnPoints=True)参数
- points:轮廓点集合(单条轮廓 cnt)
- returnPoints:默认 True,返回凸包顶点坐标;False 返回点索引
5.外接矩阵
| 函数 | 形状 | 能否旋转 | 紧凑程度 | 适用场景 |
|---|---|---|---|---|
| boundingRect | 正矩形 | 不可旋转 | 松散 | 常规框选、快速定位 |
| minAreaRect | 斜矩形 | 可旋转 | 最紧凑 | 倾斜物体定位 |
| minEnclosingCircle | 圆形 | 无旋转 | 适中 | 圆形目标检测 |
rect = cv2.minAreaRect(contour)返回值
rect = ((cx, cy), (w, h), angle)
(cx,cy):矩形中心点坐标(w,h):矩形宽、高angle:旋转倾斜角度
x, y, w, h = cv2.boundingRect(contour)参数与返回值
- 入参:单条轮廓
cnt - 返回:
x,y:矩形左上角坐标w:矩形宽度h:矩形高度
x, y, w, h = cv2.boundingRect(contour)参数与返回值
- 入参:单条轮廓
cnt - 返回:
x,y:矩形左上角坐标w:矩形宽度h:矩形高度