Emgu.CV.Util.CvException: 'OpenCV: i < 0'

Emgu.CV.Util.CvException: 'OpenCV: i < 0'

我是 EmguCv 和 kinect v2 开发的新手。 我正在尝试绘制在空白灰度图像上检测到的手的轮廓。我遇到了这个总是在代码行之后发生的异常:
CvInvoke.DrawContours(图像、温度、-1、新 MCvScalar(255、0、0)、厚度);

这是我绘制轮廓的函数:

 private void drawOnEachHand(Hand whichHand, Image<Gray, byte> image) {

            int thickness = 2;

            //Console.WriteLine("Check2 " + (whichHand == null));
            if (whichHand != null)
            {
                VectorOfPoint temp = new VectorOfPoint(whichHand.ContourDepth.Count);
                List<Point> arrTemp = new List<Point>();

                for (int intCounter = 0; intCounter < whichHand.ContourDepth.Count; intCounter++)
                {
                    int X = Convert.ToInt32(MathExtensions.ToPoint(whichHand.ContourDepth[intCounter]).X);
                    int Y = Convert.ToInt32(MathExtensions.ToPoint(whichHand.ContourDepth[intCounter]).Y);
                    arrTemp.Add(new Point(X, Y));
                }

                temp.Push(arrTemp.ToArray());

                CvInvoke.DrawContours(image, temp, -1, new MCvScalar(255, 0, 0), thickness);
                Console.WriteLine(image.Cols);
            }
        }

这是异常消息:

Exception thrown: 'Emgu.CV.Util.CvException' in Emgu.CV.World.dll<br>
An unhandled exception of type 'Emgu.CV.Util.CvException' occurred in Emgu.CV.World.dll<br>
OpenCV: i < 0

我正在使用 Visual Studio 2017,Emgu Cv 3.x,我使用 nugget 安装它。 我无法弄清楚异常消息的含义。

我不明白我做错了什么,但我没有使用 CvInvoke.DrawContours(),而是使用 Image.DrawPolyline 来实现我的目标。

我使用:
image.DrawPolyline(points, false, new Gray, thickness);

来晚了,但我现在遇到了同样的问题,due to the transition to Mat instead of Image<>,我正在发布答案。

如 EmguCV 维基中所述:

Each contour is stored as a point vector.

因此 DrawContours 方法期望轮廓存储在 VectorOfVectorOfPoint.

让它快乐的最简单方法是创建一个新的 VectorOfVectorOfPoint 并将您的轮廓存储在那里。

在你的情况下它将是:

CvInvoke.DrawContours(image, new VectorOfVectorOfPoint(temp), -1, new MCvScalar(255, 0, 0), thickness);

希望这有助于解决其他人的头痛问题。