python - 使用具有不同参数的 cv2.ellipse 时椭圆拟合异常?

标签 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)

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)

上面的结果是

enter image description here

但是,当我尝试解析实际的椭圆参数并通过传入这些参数手动绘制椭圆时(请参阅下面的代码),它会创建一个“臃肿”版本的椭圆,使自己看起来非常舒服(但很烦人)轮廓周围的空间括号,如下所示:

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)

这种恼人现象的结果是:

enter image description here

是的,我知道使用第一种方法可以解决绘制正确椭圆的问题。但我想知道它为什么这样做,因为实际上,我需要椭圆的参数来进行一些 blob 跟踪,如果解析的参数最终给出了这样的不合适的椭圆,真的吗?准确的? cv2.ellipse() 绘图函数有问题吗?关于出了什么问题的任何想法?来自 cv2.fitEllipse 函数的椭圆参数是否准确?

最佳答案

您正在绘制返回的边界框的宽度和高度。您应该绘制一半宽度和高度,因为椭圆的轴将是其边界框宽度和高度的一半

cv2.ellipse(displayframe,(x,y),(MA/2, ma/2),angle,0,360,(0,0,255))

关于python - 使用具有不同参数的 cv2.ellipse 时椭圆拟合异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281235/

相关文章:

python - 相当于 asyncio.Queues 与 worker "threads"

python-2.7 - 使用旋转矩阵偏移欧拉角

python - python 2.7中Unicode字符串到ASCII的转换

jupyter中的Python Import cv2错误适用于mac终端

opencv - 打开简历会给我的USB摄像头一个空白窗口

python - 如何将嵌套字典转换为 pandas 数据框?

python - hg 使用 fabric 从 bitbucket 中拉出

python - 有没有办法在 Python 中以特定用户身份执行命令?

python-2.7 - 在决策树期间导出 graphviz 给出错误

opencv - face_eyes检测和跟踪使用opencv