第12章 图像轮廓 -- 12.4 轮廓拟合

《OpenCV 轻松入门 面向Python》 学习笔记

计算轮廓时,可能不需要实际的轮廓,而仅需要一个接近于轮廓的近似多边形,Opencv中提供了多种计算轮廓近似多边形的方法。

1. 矩形包围框 cv2.boundingRect()


2. 最小包围矩形框 cv2.minAreaRect()

函数原型:

retval =cv2.minAreaRect(points)
  • 返回值retval表示返回的矩阵特征信息,结构是(最小外接矩形的中心(x,y),(宽度,高度),旋转角度)。
  • points 是轮廓

注意,返回值retval不满足 cv2.drawContours() 参数结构要求,必须将其转换为符合要求的结构才可以使用。如下函数可以将上面的返回值retval转换成符合要求的结构:

points = cv2.boxPoints(box) 
  • 返回值 points,是能够用于函数 cv2.drawContours()参数的轮廓点。
  • 参数 box 是函数 cv2.minAreaRect()返回值的类型的值。

3. 最小包围圆形 cv2.minEnclosingCircle()

函数原型:

center, radius = cv2.minEnclosingCircle(points)

参数:

  • 返回值center是最小包围圆形的圆心
  • 返回值radius是最小包围圆形的半径
  • 参数points是轮廓

4. 最优拟合椭圆 cv2.fitEllipse()

函数原型:

retval = cv2.fitEllipse(points)

参数:

  • 返回值retval是 RotatedRect 类型的值,这个是拟合椭圆的外界矩形,包含外接矩形的质心,宽,高,旋转角度等参数信息,这些信息与椭圆的中心点,轴长度,旋转角度等信息吻合
  • 参数points是轮廓

5. 最优拟合直线 cv2.fitLine()

函数原型:

line = cv2.fitLine(points, distType, param, reps, aeps)

参数:

  • line 为返回值,是返回的最优拟合直线参数
  • points:轮廓
  • distType 距离类型。拟合直线时,要使输入点到拟合直线的距离之和最小
  • param 距离参数,与所选的距离类型有关。当此参数被设为0时,该参数会自动选择最优值。
  • reps ,aeps 用于表示拟合直线所需要的径向精度,角度精度,通常设置为0.01

6. 最小外包三角形 cv2.minEnclosingTriangle()

retval, triangle = cv2.minEnclosingTriangle(points)

参数:

  • retval 最小外包三角形的面积
  • triangle 最小外包三角形的三个顶点集

7. 逼近多边形 cv2.approxPolyDP()

# 用来构造指定精度的逼近多边形曲线
approxCurve = cv2.approxPolyDP(curve, epsilon, closed) 

返回值:

  • approxCurve 为逼近多边形的点集

参数:

  • curve: 轮廓
  • epsilon: 精度,原始轮廓的边界的与逼近多边形边界之间的最大距离
  • closed: 布尔值,是否封闭。值为True时,逼近多边形是封闭的

函数 cv2.apprxPolyDP() 采用 Douglas-Peucker算法(DP算法) 该算法首先从轮廓中找到距离最远的两个点,将两点相连,然后在轮廓上找一个离当前直线最远的点,将该点与原有直线连成一个封闭的三角形。

然后不断重复上述过程,将新找到的距离当前多边形最远的点加入到结果中,当轮廓上所有的点到到当前多边形的距离都小于函数epsilon 参数的值,就停止。epsilon 是逼近多边形的精度信息,通常设置为多边形总长度百分比的形式

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enzo 想砸电脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值