【问题标题】:How does cv2.fitEllipse handle width/height with regards to rotation?cv2.fitEllipse 如何处理旋转的宽度/高度?
【发布时间】:2016-12-21 02:30:52
【问题描述】:
宽度为 50、高度为 100、角度为 0 的椭圆与宽度为 100、高度为 50、角度为 90 的椭圆相同 - 即一个是另一个的旋转。
cv2.fitEllipse 如何处理这个问题?它是否以某种规范化形式返回椭圆(即选择角度使得宽度始终为
当我试图确定两个拟合椭圆是否相似时,我问我是否必须考虑这些事情。文档根本没有解决这个问题。
【问题讨论】:
标签:
python
opencv
ellipse
data-fitting
【解决方案1】:
你可以在fitEllipse的OpenCV源代码中看到椭圆的高度总是大于宽度。
如果宽度大于高度,则交换width 和height,并更正angle。 box 是定义椭圆的RotatedRect:
if( box.size.width > box.size.height )
{
float tmp;
CV_SWAP( box.size.width, box.size.height, tmp );
box.angle = (float)(90 + rp[4]*180/CV_PI);
}
【解决方案2】:
根据经验,我运行了匹配数千个椭圆的代码,但我从未得到一个返回值,其中返回的宽度大于返回的高度。因此,OpenCV 似乎对椭圆进行了标准化,使得height >= width。