如何在OpenCv C ++中使用fitEllipse函数检查轮廓是否为椭圆?

时间:2015-02-19 09:10:14

标签: c++ opencv ellipse

    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

    findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

现在我怎么能从这些轮廓中得到椭圆的位置?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是每个轮廓:

  • 计算椭圆(使用fitEllipse函数)
  • 绘制填充轮廓和(在其他垫子上)绘制填充的椭圆(从前一点)
  • 在另一个的垫子上
  • 减法(或者 - 可能更好 - 使用absdiff函数)
  • 查找非黑色像素数(使用countNonZero函数)
  • 如果除了轮廓区域的非零像素数小于该轮廓是椭圆形,如果该数字很大 - 它不是椭圆形。您需要自己找到值

绘制轮廓可能有点棘手,因为很难分辨绘制它们的位置。对我来说,最好的选择是找到轮廓质量中心,并在一个位置绘制轮廓,使质心与椭圆中心在同一点。

希望它有所帮助,而且它很清楚,如果没有 - 让我知道,我会尝试更好地解释它。