轮廓拟合

在计算轮廓是,可能并不需要实际的轮廓,可仅需要一个近似于轮廓的多边形。OpenCV提供了多种计算轮廓近似多边形的方法。

1.矩形包围框

返回值retval 表示矩形边界的左上角顶点的坐标值和矩形的宽度和高度;

参数array是灰度图像或者轮廓;

cv2.rectangle()函数可以用来绘制矩形

例如:

代码


运行结果

2.最小包围矩形框

返回值retval包含矩形特征信息:最小外接矩阵的中心(x,y),(宽度,高度),旋转角度

参数points是轮廓。

但这里的返回值retval的结构并不符合函数cv2.drawContours()的参数结构要求,需要转换成符合要求的结构。可以通过cv2.boxPoints()函数完成这种转换。

例如:

代码
执行结果

3.最小包围圆

该函数通过一个迭代算法构造一个对象的最小包围圆形。返回最小包围圆的圆心和半径,参数points是轮廓。

代码
运行结果

4.最优拟合椭圆

返回值是RotatedRect类型的值,这是因为该函数返回的是拟合椭圆的外接矩形,它包含质心、宽、高、旋转角度等信息。参数points是轮廓。

代码
执行结果

5.最优拟合直线

points是轮廓;

distType:距离类型。要使输入点到拟合曲线的距离之和最小。如欧氏距离cv2.DIST_L2,用户自定义距离cv2.DIST_USER等;

param:距离参数。与所选距离类型有关,当此参数被设置为0时,该函数会自动选择最优值;

reps:用于表示拟合直线所需要的径向精度,通常该值被设定为0.01;

aeps:用于表示拟合直线所需的角度精度,通常该值被设定为0.01.


代码
执行结果

6.最小外包三角形

在OpenCV中,函数cv2.minEnclosingTrangle()用来构造最小外包三角形。

式中:retval是外包三角形的面积;triangle是三角形的三个顶点。

代码
运行结果

7.逼近多边形

该函数可以构造指定精度的逼近多边形曲线,采用的是Douglas-Peucker算法(DP算法)。式中,curve是轮廓;epsilon为精度,原始轮廓的边界点与逼近多边形边界之间的最大距离,通常将该值社设置为多边形周长的的百分比形式;closed表示逼近多边形是否封闭,为True时,是封闭的。

代码
运行结果,五角星为所选的轮廓

你可能感兴趣的:(轮廓拟合)