1

我正在为我的项目使用 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(); 每次给出不同的角点顺序。
第一个矩形返回左下角作为角 0,左上角作为角 1 等。
第二个矩形返回右下角作为角 0,左下角作为角 1 等。

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

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

4

1 回答 1

2
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;
于 2013-09-15T02:08:21.503 回答