cv2.fitEllipse 如何处理 width/height 的旋转?
How does cv2.fitEllipse handle width/height with regards to rotation?
宽度为 50、高度为 100、角度为 0 的椭圆与宽度为 100、高度为 50、角度为 90 的椭圆相同 - 即一个是另一个的旋转。
cv2.fitEllipse如何处理这个问题?它 return 是某种规范化形式的椭圆(即选择角度时宽度始终小于高度),还是可以提供任何输出?
我问是因为我正在尝试确定两个合适的椭圆是否相似,并且不确定我是否必须考虑这些因素。文档根本没有解决这个问题。
根据经验,我 运行 代码匹配了数千个椭圆,但我从未得到一个 return 值 returned 宽度大于 returned 高度.因此,OpenCV 似乎对椭圆进行了标准化,使得 height >= width
.
您可以在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);
}
宽度为 50、高度为 100、角度为 0 的椭圆与宽度为 100、高度为 50、角度为 90 的椭圆相同 - 即一个是另一个的旋转。
cv2.fitEllipse如何处理这个问题?它 return 是某种规范化形式的椭圆(即选择角度时宽度始终小于高度),还是可以提供任何输出?
我问是因为我正在尝试确定两个合适的椭圆是否相似,并且不确定我是否必须考虑这些因素。文档根本没有解决这个问题。
根据经验,我 运行 代码匹配了数千个椭圆,但我从未得到一个 return 值 returned 宽度大于 returned 高度.因此,OpenCV 似乎对椭圆进行了标准化,使得 height >= width
.
您可以在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);
}