使用具有不同参数的 cv2.ellipse 时椭圆拟合异常?
Anomaly with Ellipse Fitting when using cv2.ellipse with different parameters?
我在 Windows 8.1 上使用 OpenCV 2.4.11 和 Python 2.7.9。我试图将椭圆拟合到我的轮廓上,但我遇到了一些我无法理解的东西。
当我调用 cv2.fitEllipse 并获取 return 值,然后使用以下代码将 return 值直接传递给 cv2.ellipse 时,将椭圆绘制到屏幕上完美贴合我的轮廓:
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)
上面的结果是
但是,当我尝试解析实际的椭圆参数并通过传入这些参数手动绘制椭圆时(请参阅下面的代码),它创建了一个椭圆的 "bloated" 版本,使自己非常舒适(还是很烦人)括号space围绕轮廓,如下:
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)
这种恼人现象的结果是:
是的,我知道使用第一种方法可以解决 绘制 正确椭圆的问题。但我想知道它为什么这样做,因为实际上,我需要椭圆的参数来进行一些 blob 跟踪,如果解析的参数最终给出了这样的不合适的椭圆,真的吗?准确的? cv2.ellipse() 绘图函数有问题吗?关于出了什么问题的任何想法?来自 cv2.fitEllipse 函数的椭圆参数是否准确?
您正在绘制返回的边界框的宽度和高度。您应该绘制 half 宽度和高度,因为椭圆的轴将是其边界框
宽度和高度的一半
cv2.ellipse(displayframe,(x,y),(MA/2, ma/2),angle,0,360,(0,0,255))
我在 Windows 8.1 上使用 OpenCV 2.4.11 和 Python 2.7.9。我试图将椭圆拟合到我的轮廓上,但我遇到了一些我无法理解的东西。
当我调用 cv2.fitEllipse 并获取 return 值,然后使用以下代码将 return 值直接传递给 cv2.ellipse 时,将椭圆绘制到屏幕上完美贴合我的轮廓:
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)
上面的结果是
但是,当我尝试解析实际的椭圆参数并通过传入这些参数手动绘制椭圆时(请参阅下面的代码),它创建了一个椭圆的 "bloated" 版本,使自己非常舒适(还是很烦人)括号space围绕轮廓,如下:
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)
这种恼人现象的结果是:
是的,我知道使用第一种方法可以解决 绘制 正确椭圆的问题。但我想知道它为什么这样做,因为实际上,我需要椭圆的参数来进行一些 blob 跟踪,如果解析的参数最终给出了这样的不合适的椭圆,真的吗?准确的? cv2.ellipse() 绘图函数有问题吗?关于出了什么问题的任何想法?来自 cv2.fitEllipse 函数的椭圆参数是否准确?
您正在绘制返回的边界框的宽度和高度。您应该绘制 half 宽度和高度,因为椭圆的轴将是其边界框
宽度和高度的一半cv2.ellipse(displayframe,(x,y),(MA/2, ma/2),angle,0,360,(0,0,255))