Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用不同参数的cv2.Ellipse时椭圆拟合异常?_Python_Python 2.7_Opencv_Image Processing - Fatal编程技术网

Python 使用不同参数的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)

我正在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)
上述结果如下所示

但是,当我试图解析实际的椭圆参数并通过传入这些参数(请参见下面的代码)手动绘制椭圆时,它会创建一个“膨胀”的椭圆版本,在轮廓周围为自己提供一个非常舒适(但令人恼火)的方括号,如下所示:

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