Python 使用不同参数的cv2.Ellipse时椭圆拟合异常?
我正在Windows 8.1上使用OpenCV 2.4.11和Python 2.7.9。我试图将椭圆拟合到我的轮廓上,但我发现了一些我无法理解的东西 当我调用cv2.fitEllipse并获取返回值,然后使用以下代码将返回值直接传递到cv2.ellipse中时,屏幕上绘制的椭圆非常完美,可以使我的轮廓得到最佳拟合:Python 使用不同参数的cv2.Ellipse时椭圆拟合异常?,python,python-2.7,opencv,image-processing,Python,Python 2.7,Opencv,Image Processing,我正在Windows 8.1上使用OpenCV 2.4.11和Python 2.7.9。我试图将椭圆拟合到我的轮廓上,但我发现了一些我无法理解的东西 当我调用cv2.fitEllipse并获取返回值,然后使用以下代码将返回值直接传递到cv2.ellipse中时,屏幕上绘制的椭圆非常完美,可以使我的轮廓得到最佳拟合: contours, hierarchy = cv2.findContours(binaryimage,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
contours, hierarchy = cv2.findContours(binaryimage,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for ind, cont in enumerate(contours):
elps = cv2.fitEllipse(cont)
#Feed elps directly into cv2.ellipse
cv2.ellipse(displayframe,elps,(0,0,255))
cv2.imshow("Perfectly fitted ellipses", displayframe)
上述结果如下所示
但是,当我试图解析实际的椭圆参数并通过传入这些参数(请参见下面的代码)手动绘制椭圆时,它会创建一个“膨胀”的椭圆版本,在轮廓周围为自己提供一个非常舒适(但令人恼火)的方括号,如下所示:
contours, hierarchy = cv2.findContours(binaryimage,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for ind, cont in enumerate(contours):
(x,y),(MA,ma),angle = cv2.fitEllipse(cont)
#feed the parsed parameters into cv2.ellipse
cv2.ellipse(displayframe,(x,y),(MA, ma),angle,0,360,(0,0,255))
cv2.imshow("Ellipses NOT fitting the contours properly",displayframe)
这种恼人现象的结果是:
是的,我知道使用第一种方法可以解决绘制正确椭圆的问题。但我想知道它为什么要这样做,因为,实际上,我需要椭圆的参数来做一些斑点跟踪,如果解析的参数最终给出了像这样的宽不合适的椭圆,它真的准确吗?cv2.ellipse()绘图函数有问题吗?你知道哪里出了问题吗?cv2.fitEllipse函数中的椭圆参数是否准确?您正在绘制返回边界框的宽度和高度。您应该绘制宽度和高度的一半,因为椭圆的轴是其边界框的一半宽度和高度
cv2.ellipse(displayframe,(x,y),(MA/2, ma/2),angle,0,360,(0,0,255))
为什么是的!非常感谢。@UncleMeh很高兴这有帮助:D