Note that there are some explanatory texts on larger screens.

plurals
  1. POAccessViolationException was unhandled in EMGU CV
    text
    copied!<p>I always get this error when I run my program...</p> <p><img src="https://i.stack.imgur.com/KEOaf.png" alt="enter image description here"></p> <p>i'm not sure about what's wrong with my program, FYI, actually my program consist of many image processing algorithm's such as </p> <ul> <li>viola-jones, haarcascade for hand detection</li> <li>camshift + kalman filter for hand tracking</li> <li>convex hull and convexity defects for counting finger</li> <li>and other preprocessing ....</li> </ul> <p>I have no idea whether these process triggering the error or not...</p> <p>but when I remove convexhull / convexity defects, the errors gone... any solution?</p> <p>Edited : (added)</p> <p>this is the code snippet</p> <pre><code> private void ExtractContourAndHull() { using (MemStorage storage = new MemStorage()) { Contour&lt;Point&gt; contours = backproject.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, storage); Contour&lt;Point&gt; biggestContour = null; Double Result1 = 0; Double Result2 = 0; while (contours != null) { Result1 = contours.Area; if (Result1 &gt; Result2) { Result2 = Result1; biggestContour = contours; } contours = contours.HNext; } if (biggestContour != null) { //image.Draw(biggestContour, new Bgr(Color.DarkViolet), 2); Contour&lt;Point&gt; currentContour = biggestContour.ApproxPoly(biggestContour.Perimeter * 0.005, storage); image.Draw(currentContour, new Bgr(Color.LimeGreen), 2); biggestContour = currentContour; hull = biggestContour.GetConvexHull(ORIENTATION.CV_CLOCKWISE); box = biggestContour.GetMinAreaRect(); PointF[] points = box.GetVertices(); //handRect = box.MinAreaRect(); //image.Draw(handRect, new Bgr(200, 0, 0), 1); Point[] ps = new Point[points.Length]; for (int i = 0; i &lt; points.Length; i++) ps[i] = new Point((int)points[i].X, (int)points[i].Y); image.DrawPolyline(hull.ToArray(), true, new Bgr(200, 125, 75), 2); image.Draw(new CircleF(new PointF(box.center.X, box.center.Y), 3), new Bgr(200, 125, 75), 2); //ellip.MCvBox2D= CvInvoke.cvFitEllipse2(biggestContour.Ptr); //image.Draw(new Ellipse(ellip.MCvBox2D), new Bgr(Color.LavenderBlush), 3); //PointF center; //float radius; //CvInvoke.cvMinEnclosingCircle(biggestContour.Ptr, out center, out radius); //image.Draw(new CircleF(center, radius), new Bgr(Color.Gold), 2); //image.Draw(new CircleF(new PointF(ellip.MCvBox2D.center.X, ellip.MCvBox2D.center.Y), 3), new Bgr(100, 25, 55), 2); //image.Draw(ellip, new Bgr(Color.DeepPink), 2); //CvInvoke.cvEllipse(image, new Point((int)ellip.MCvBox2D.center.X, (int)ellip.MCvBox2D.center.Y), new System.Drawing.Size((int)ellip.MCvBox2D.size.Width, (int)ellip.MCvBox2D.size.Height), ellip.MCvBox2D.angle, 0, 360, new MCvScalar(120, 233, 88), 1, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, 0); //image.Draw(new Ellipse(new PointF(box.center.X, box.center.Y), new SizeF(box.size.Height, box.size.Width), box.angle), new Bgr(0, 0, 0), 2); filteredHull = new Seq&lt;Point&gt;(storage); for (int i = 0; i &lt; hull.Total; i++) { if (Math.Sqrt(Math.Pow(hull[i].X - hull[i + 1].X, 2) + Math.Pow(hull[i].Y - hull[i + 1].Y, 2)) &gt; box.size.Width / 10) { filteredHull.Push(hull[i]); } } defects = biggestContour.GetConvexityDefacts(storage, Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE); defectArray = defects.ToArray(); } } } private void DrawAndComputeFingersNum() { using (MemStorage storage = new MemStorage()) { int fingerNum = 0; #region hull drawing //for (int i = 0; i &lt; filteredHull.Total; i++) //{ // PointF hullPoint = new PointF((float)filteredHull[i].X, // (float)filteredHull[i].Y); // CircleF hullCircle = new CircleF(hullPoint, 4); // image.Draw(hullCircle, new Bgr(Color.Aquamarine), 2); //} #endregion #region defects drawing ***defects = new Seq&lt;MCvConvexityDefect&gt;(storage);*** for (int i = 0; i &lt; defects.Total; i++) { PointF startPoint = new PointF((float)defectArray[i].StartPoint.X, (float)defectArray[i].StartPoint.Y); PointF depthPoint = new PointF((float)defectArray[i].DepthPoint.X, (float)defectArray[i].DepthPoint.Y); PointF endPoint = new PointF((float)defectArray[i].EndPoint.X, (float)defectArray[i].EndPoint.Y); LineSegment2D startDepthLine = new LineSegment2D(defectArray[i].StartPoint, defectArray[i].DepthPoint); LineSegment2D depthEndLine = new LineSegment2D(defectArray[i].DepthPoint, defectArray[i].EndPoint); CircleF startCircle = new CircleF(startPoint, 5f); CircleF depthCircle = new CircleF(depthPoint, 5f); CircleF endCircle = new CircleF(endPoint, 5f); MCvFont angga = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_SCRIPT_COMPLEX, 0.5, 0.5); // image.Draw(defectArray[i].StartPoint.X.ToString() + " , " + defectArray[i].StartPoint.Y.ToString(), ref angga, new Point(defectArray[i].StartPoint.X, defectArray[i].StartPoint.Y), new Bgr(Color.Red)); image.Draw(defectArray[i].StartPoint.X.ToString() + " , " + defectArray[i].StartPoint.Y.ToString() + " , " + i.ToString(), ref angga, new Point(defectArray[i].StartPoint.X, defectArray[i].StartPoint.Y), new Bgr(Color.Red)); //Custom heuristic based on some experiment, double check it before use if ((startCircle.Center.Y &lt; box.center.Y || depthCircle.Center.Y &lt; box.center.Y) &amp;&amp; (startCircle.Center.Y &lt; depthCircle.Center.Y) &amp;&amp; (Math.Sqrt(Math.Pow(startCircle.Center.X - depthCircle.Center.X, 2) + Math.Pow(startCircle.Center.Y - depthCircle.Center.Y, 2)) &gt; box.size.Height / 6.5)) { fingerNum++; //image.Draw(startDepthLine, new Bgr(Color.Blue), 2); //image.Draw(depthEndLine, new Bgr(Color.Magenta), 2); } image.Draw(startCircle, new Bgr(Color.Red), 2); image.Draw(depthCircle, new Bgr(Color.Yellow), 5); //image.Draw(endCircle, new Bgr(Color.DarkBlue), 4); } #endregion MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_DUPLEX, 5d, 5d); image.Draw(fingerNum.ToString(), ref font, new Point(50, 150), new Bgr(Color.White)); hand.fingerChangedCompute = fingerNum; } } public MemStorage storage { get; set; } </code></pre> <p>orgin take a look at DrawandComputeFingersNUm() you'll see a line </p> <pre><code>defects = new Seq&lt;MCvConvexityDefect&gt;(storage); </code></pre> <p>the problem will occur when I uncomment the line above..</p> <p>anyone knows how to solve this problem? any help would be appreciated.. thanks</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload