opencv中的椭圆拟合错误总结cv2.fitEllipse(points)

在下面的代码中,需要对hull也就是cv2.fitEllipse(points=hull)需要的点数是大于等于5的,因此需要若不能保证取出的点数大于等于5那么一个简单的方法是加入if判断,只做大于等于5的情况下的椭圆拟合。

 for cnt in contours:
        # 函数cvContourArea计算整个或部分轮廓的面积
        area = cv2.contourArea(cnt)
   if area < min_area or len(cnt) < 15:
        continue
    # 直线拟合cv2.fitLine(InputArray points, distType, param, reps, aeps)
    # InputArray Points: 待拟合的直线的集合,必须是矩阵形式
    # 对于二维直线,输出output为4维,前两维代表拟合出的直线的方向,后两位代表直线上的一点
    [vx, vy, x, y] = cv2.fitLine(cnt, cv2.DIST_L2, 0, 0.01, 0.01)
    # 寻找图像的凸包,即找一个能够包裹目标图像(字符)的多边形
    hull = cv2.convexHull(cnt)
    # print(type(hull))
    if len(hull) < 5:
        continue
    # 椭圆拟合(使得所有点尽可能的在椭圆上)返回椭圆的中心坐标和旋转角
    center, (MA, ma), angle = cv2.fitEllipse(hull)

你可能感兴趣的:(opencv,图像处理)