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);
希望这有助于解决其他人的头痛问题。
我是 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);
希望这有助于解决其他人的头痛问题。