我正在为我的项目使用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,底部左侧作为角落等返回。
我想知道是否有其他人遇到这个问题,是否有人知道如何解决这个问题?
如果您需要更多信息来回答这个问题,请告诉我。
答案 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;