1

色検出とバイナリしきい値処理の後、次のコードを使用して輪郭を見つけ、画像に描画します。

 using (MemStorage stor = new MemStorage())
        {
           Contour<Point> contours = img.FindContours(
              Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
              Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST,
              stor);

           for (; contours != null; contours = contours.HNext)
           {
              Contour<Point> currentContour = contours.ApproxPoly(contours.Perimeter * poly, stor);

              img.Draw(currentContour,new Bgr(255,255,255),1);

              Rectangle currentrect = currentContour.BoundingRectangle;

              img.Draw(currentrect,new Bgr(255,255,255),2);
            }
        }

私の問題は、予想どおり、輪郭が長方形であるが画像内で回転している場合、境界長方形が回転に合わせて向きを変えないことです。この機能を達成する別の方法はありますか? どんな助けでも大歓迎です。

4

2 に答える 2

2

はい、これを達成する別の方法があります。使用できます

contour.GetConvexHull(ORIENTATION.CV_CLOCKWISE);

Moments を使用すると、方向を簡単に取得し、それに応じて長方形を調整できます。

于 2013-02-15T18:22:02.650 に答える
0

あなたが探している方法は次のとおりです。

PointCollection.MinAreaRect(points);

実際の例はこちら: http://www.emgu.com/wiki/index.php/Minimum_Area_Rectangle_in_CSharp

完全なドキュメント (上記以外のものはほとんどありません) は次の場所にあります

于 2014-10-21T17:22:53.560 に答える