0

我是 openCvSharp 的新手,我正在从 vs nuget 插件学习 OpenCvSharp 3。我能够画出线条和圆圈。但是我在绘制折线/fillPoly 函数时遇到了问题。调用参数之一是担心类型。我认为它是 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 和折线的帖子,您会发现您需要一个点列表列表才能调用 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 回答