1

プロジェクトに EMGU CV を使用していますが、奇妙な問題に直面しています。
私はカニーエッジを使って写真の中のいくつかの四角形を見つけます。
これは正しく機能しています。その後、各正方形内のピクセルを取得し、それを使用して境界線を描画します。

私が直面している問題は、ランダムなピクセルを生成するために各コーナーの頂点が必要なことです。これを行うには、次のコードを使用します。

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 など
として返します。ただし、2 番目の長方形は右下をコーナー 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 に答える