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

How to check contours whether they are ellipse or not by using fitEllipse function in OpenCv C++?

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

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

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

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

  • 计算椭圆(使用 fitEllipse 函数)
  • 绘制填充轮廓并(在其他垫子上)绘制填充椭圆(从上一点开始)
  • 在垫子上从另一个减去(或者 - 可能更好 - 使用 absdiff 函数)
  • 找到非黑色像素的数量(使用 countNonZero 函数)
  • 如果除以轮廓面积的非零像素数小于此轮廓是椭圆,如果此数字很大 - 它不是椭圆。你需要自己寻找价值

绘制等高线可能有点棘手,因为很难说出在哪里画等高线。对我来说,最好的选择是找到轮廓的质心并在质心与椭圆中心位于同一点的位置绘制轮廓。

希望它对您有所帮助并且很清楚,如果没有 - 让我知道,我会尽力解释得更好。