如何用4个点拟合椭圆轮廓?

时间:2016-09-14 09:24:01

标签: python opencv image-processing

我有4个坐标点。使用这4个点我想要拟合椭圆,但似乎cv2.fitellipse()的要求至少为5个点。有没有什么方法可以解决这个问题,只用4分画一个计数器?

当使用cv2.CHAIN_APPROX_SIMPLE时,fitellipse如何绘制轮廓,它只提供4个坐标点。

2 个答案:

答案 0 :(得分:1)

四点不足以适应椭圆而没有歧义(不要忘记一般椭圆可以任意旋转)。您需要至少五个才能获得精确的解决方案或更多以适合最小的方式。有关更详细的说明,我发现this

您可以使用drawContours(或适合例如一个圆圈)绘制countour本身(不适合任何东西)。

所以回答你的第二个问题(假设我理解正确):如果可用的点数少于5个,则不会,但FindContoursCHAIN_APPROX_SIMPLE结合使用最终会更多取决于特定的检测轮廓。

here。在这个C ++示例中,只有在至少有5个点可用时才会使用省略号。

答案 1 :(得分:1)

如果你看一下省略号的等式:

enter image description here

和同质的表示:

enter image description here

圆锥矩阵看起来像这样:

enter image description here

你看它有6个参数 - 一个投射自由度,所以5个自由度(如果f不等于0)。 C上的每个点都给出了参数a-f的条件。所以需要五点来描述一个圆锥曲线:

enter image description here

要解决此问题,您需要计算矩阵的内核(五个点):

enter image description here

如果您有五个以上,则需要最小二乘解决方案: enter image description here

和x是来自enter image description here

的最小特征值的特征向量