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

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

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

轮廓拟合

      • 1. 矩形包围框 cv2.boundingRect()
      • 2. 最小包围矩形框 cv2.minAreaRect()
      • 3. 最小包围圆形 cv2.minEnclosingCircle()
      • 4. 最优拟合椭圆 cv2.fitEllipse()
      • 5. 最优拟合直线 cv2.fitLine()
      • 6. 最小外包三角形 cv2.minEnclosingTriangle()
      • 7. 逼近多边形 cv2.approxPolyDP()

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 是逼近多边形的精度信息,通常设置为多边形总长度百分比的形式

你可能感兴趣的:(OpenCV,opencv,机器学习,python,计算机视觉)