2013-04-08 1 views
1

내 프로젝트에 EMGU CV를 사용하고 있으며 이상한 문제에 직면하고 있습니다.
나는 캔디를 사용하여 사진의 일부 사각형을 찾습니다.
올바르게 작동합니다. 그 후 각 사각형 내부의 픽셀을 가져 와서 테두리를 그리는 데 사용하고 싶습니다.
EMGU CV MCvBox2D.GetVertices가 모서리의 순서가 다름

내가 직면 한 문제는 임의의 픽셀을 생성하기 위해 각 모서리의 정점이 필요하다는 것입니다. 내가 코드를 사용 이렇게하려면 다음을 수행

PointF[] corners = rectangle.GetVertices(); 
float x = Math.Max(corners[1].X, corners[0].X); 
float y = Math.Max(corners[1].Y, corners[2].Y); 
float width = Math.Min(corners[2].X, corners[3].X) - x; 
float height = Math.Min(corners[0].Y, corners[3].Y) - y; 

이 코드의 문제를입니다 rectangle.GetVertices(); 매번 다른 순서의 모서리를 제공합니다.
첫 번째 사각형을 반환 코너 0으로 bottomleft, 최고는 누구 인 경우
등 코너 1

을 같이 bottomleft 코너 0으로 bottomright 두 번째 사각형을 반환, 내가 궁금하네요 어떻게 이제까지 등 코너 1로 남겨 이 문제가 있고 누군가가 이것을 고치는 방법을 알고 있다면?

이 문제에 대한 답변이 더 필요하면 알려주십시오.

+0

동일한 문제가 있습니다. 꼭지점은 다른 순서로옵니다. – Tony

답변

1
PointF[] corners = rectangle.GetVertices(); 

// Maybe this 
corners = corners.OrderBy(s => s.X).ThenBy(s => s.Y).ToArray(); 

float x = Math.Max(corners[1].X, corners[0].X); 
float y = Math.Max(corners[1].Y, corners[2].Y); 
float width = Math.Min(corners[2].X, corners[3].X) - x; 
float height = Math.Min(corners[0].Y, corners[3].Y) - y; 
관련 문제