0

私はopenCvSharpが初めてで、vs nugetプラグインからOpenCvSharp 3を学んでいます。線も円もOKで描けました。しかし、ポリライン/fillPoly関数の描画に問題があります。呼び出しパラメーターの 1 つが心配タイプです。rook_point 配列だと思います。配列を無駄に渡すために他のバージョン(定義)を試しました。

私は切り株です。助けていただけるなら...返信してください。

ありがとう、キング


    using OpenCvSharp;
    class Program 
    {
        static void Main()
        {
            // Create black empty images
            Mat src = Mat.Zeros(400, 400, MatType.CV_8UC3);

            int w = 400;
            /* Create some points */
            Point[] rook_points = new Point[20];

            rook_points[0] = new Point(w / 4.0, 7 * w / 8.0);
            rook_points[1] = new Point(3 * w / 4.0, 7 * w / 8.0);
            rook_points[2] = new Point(3 * w / 4.0, 13 * w / 16.0);
            rook_points[3] = new Point(11 * w / 16.0, 13 * w / 16.0);
            rook_points[4] = new Point(19 * w / 32.0, 3 * w / 8.0);
            rook_points[5] = new Point(3 * w / 4.0, 3 * w / 8.0);
            rook_points[6] = new Point(3 * w / 4.0, w / 8.0);
            rook_points[7] = new Point(26 * w / 40.0, w / 8.0);
            rook_points[8] = new Point(26 * w / 40.0, w / 4.0);
            rook_points[9] = new Point(22 * w / 40.0, w / 4.0);
            rook_points[10] = new Point(22 * w / 40.0, w / 8.0);
            rook_points[11] = new Point(18 * w / 40.0, w / 8.0);
            rook_points[12] = new Point(18 * w / 40.0, w / 4.0);
            rook_points[13] = new Point(14 * w / 40.0, w / 4.0);
            rook_points[14] = new Point(14 * w / 40.0, w / 8.0);
            rook_points[15] = new Point(w / 4.0, w / 8.0);
            rook_points[16] = new Point(w / 4.0, 3 * w / 8.0);
            rook_points[17] = new Point(13 * w / 32.0, 3 * w / 8.0);
            rook_points[18] = new Point(5 * w / 16.0, 13 * w / 16.0);
            rook_points[19] = new Point(w / 4.0, 13 * w / 16.0);

            Cv2.FillPoly(src, rook_points, true, new Scalar(255, 255, 55));  // invalid parameter

            using (new Window("Image", src))
                Cv2.WaitKey(0);
        }
    }
4

1 に答える 1

1

以下にリンクされている FillPoly と Polylines に関する投稿を見ると、FillPoly を呼び出すためにポイントのリストのリストが必要であることがわかります。

https://github.com/shimat/opencvsharp/issues/181

これが簡単な例です。

Mat output = new Mat(new Size(100, 100), MatType.CV_8U, new Scalar(1));
output.SetTo(Scalar.Black);
List<List<Point>> ListOfListOfPoint = new List<List<Point>>();
List<Point> points = new List<Point>();
points.Add(new Point(10, 10));
points.Add(new Point(10, 50));
points.Add(new Point(50, 50));
points.Add(new Point(50, 10));
ListOfListOfPoint.Add(points);
output.FillPoly(ListOfListOfPoint, Scalar.White);
Cv2.ImShow("Window", output);
Cv2.WaitKey();
于 2016-03-14T12:56:15.483 に答える