四点不足以适应椭圆而没有歧义(不要忘记一般椭圆可以任意旋转)。您需要至少五个才能获得精确的解决方案或更多以适合最小的方式。有关更详细的说明,我发现this。
您可以使用drawContours
(或适合例如一个圆圈)绘制countour本身(不适合任何东西)。
所以回答你的第二个问题(假设我理解正确):如果可用的点数少于5个,则不会,但FindContours
与CHAIN_APPROX_SIMPLE
结合使用最终会更多取决于特定的检测轮廓。
见here。在这个C ++示例中,只有在至少有5个点可用时才会使用省略号。
如果你看一下省略号的等式:
和同质的表示:
圆锥矩阵看起来像这样:
你看它有6个参数 - 一个投射自由度,所以5个自由度(如果f不等于0)。
C上的每个点都给出了参数a-f的条件。所以需要五点来描述一个圆锥曲线:
要解决此问题,您需要计算矩阵的内核(五个点):
如果您有五个以上,则需要最小二乘解决方案:
和x是来自
的最小特征值的特征向量