2016-08-14 4 views
1

너비 50, 높이 100 및 각도 0의 타원은 너비 100, 높이 50 및 각도 90의 타원과 동일합니다. 즉, 하나는 다른 하나의 회전입니다.cv2.fitEllipse는 회전과 관련하여 너비/높이를 어떻게 처리합니까?

어떻게 cv2.fitEllipse가 이것을 처리합니까? 일부 정규화 된 형식 (즉, 너비가 항상 < 높이가되도록 각도가 선택됨)로 타원을 반환합니까 아니면 모든 출력을 제공 할 수 있습니까?

필자는 두 개의 맞춤 타원이 비슷한 지 여부를 확인하려고 노력하고 있으며 이러한 것들을 고려해야하는지 확신 할 수 없습니다. 이 문서에서는이 문제를 전혀 다루지 않습니다.

+0

: box이 타원을 정의하는 RotatedRect입니다 http://www.bmva.org/bmvc/1995/bmvc-95-050.pdf 어쩌면 추가 정보가 – Micka

답변

3

OpenCV 소스 코드 fitEllipse에서 타원 높이가 항상 너비보다 큰 것을 볼 수 있습니다.

너비가 높이보다 큰 경우 widthheight이 바뀌고 angle이 수정됩니다. 사용이 알고리즘 AFAIK

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); 
} 
0

경험적으로 나는 수천 개의 타원과 일치하는 코드를 실행했는데 반환 된 너비가 반환 된 높이보다 큰 경우 반환 값 하나를 얻지 못했습니다. 그래서 OpenCV는 height >= width과 같은 타원을 정규화하는 것 같습니다.