EMGU CV MCvBox2D.GetVertices给出了不同的角点顺序

时间:2013-04-08 15:20:56

标签: c# emgucv rectangles

我正在为我的项目使用EMGU CV,我面临一个奇怪的问题 我使用cannyedges在照片中找到一些正方形 这是正常的。之后,我想在每个方块内部取一个像素并使用它来绘制边框。

我面临的问题是我需要每个角落的顶点才能生成随机像素。 为此,我使用代码:

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();每次给出不同的角点顺序。
第一个矩形返回bottomleft作为角0,左上角作为角1等。
然而,第二个矩形如何在角落0,底部左侧作为角落等返回。

我想知道是否有其他人遇到这个问题,是否有人知道如何解决这个问题?

如果您需要更多信息来回答这个问题,请告诉我。

1 个答案:

答案 0 :(得分: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;