寬度50,高度100和角度0的橢圓將與寬度100,高度50和角度90的橢圓相同 - 即一個是另一個的旋轉。cv2.fitEllipse如何處理旋轉的寬度/高度?
cv2.fitEllipse如何處理?它是否以某種規格化形式返回橢圓(即拾取角度使得寬度始終爲<高度),還是可以提供任何輸出?
我問,因爲我試圖確定兩個擬合橢圓是否相似,我不確定是否必須考慮這些事情。文檔根本沒有解決這個問題。
寬度50,高度100和角度0的橢圓將與寬度100,高度50和角度90的橢圓相同 - 即一個是另一個的旋轉。cv2.fitEllipse如何處理旋轉的寬度/高度?
cv2.fitEllipse如何處理?它是否以某種規格化形式返回橢圓(即拾取角度使得寬度始終爲<高度),還是可以提供任何輸出?
我問,因爲我試圖確定兩個擬合橢圓是否相似,我不確定是否必須考慮這些事情。文檔根本沒有解決這個問題。
您可以在OpenCV源代碼中看到fitEllipse橢圓的高度始終大於寬度。
如果寬度大於高度,則交換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);
}
根據經驗,我運行了匹配數千個橢圓的代碼,並且我從來沒有得到一個返回值,其中返回的寬度大於返回的高度。所以看來OpenCV正常化了橢圓,例如height >= width
。
AFAIK此算法用於:http://www.bmva.org/bmvc/1995/bmvc-95-050.pdf也許有附加信息 – Micka