所以我正在尝试使用opencvsharp来创建增强现实跟踪器,而我遇到内存泄漏问题。
我正在尝试从相机图像中识别矩形(这是我的标记)我很确定违规代码是
CvSeq<CvPoint> firstcontour = null;
List<MarkerRectangle> rectangles = new List<MarkerRectangle>();
CvMemStorage storage = Cv.CreateMemStorage(0);
CvMemStorage storagepoly = Cv.CreateMemStorage(0);
IplImage gsImageContour = Cv.CreateImage(Cv.GetSize(thresholdedImage), thresholdedImage.Depth, thresholdedImage.NChannels);
//find contours
Cv.Copy(thresholdedImage, gsImageContour, null);
int contourCount = Cv.FindContours(gsImageContour, storage, out firstcontour, CvContour.SizeOf,
ContourRetrieval.CComp, ContourChain.ApproxSimple, Cv.Point(0, 0));
CvSeq<CvPoint> polycontour = firstcontour.ApproxPoly(CvContour.SizeOf, storagepoly, ApproxPolyMethod.DP, 4, true);
我很确定违规行是:
int contourCount = Cv.FindContours(gsImageContour, storage, out firstcontour, CvContour.SizeOf, ContourRetrieval.CComp, ContourChain.ApproxSimple, Cv.Point(0, 0));
和/或
CvSeq<CvPoint> polycontour = firstcontour.ApproxPoly(CvContour.SizeOf, storagepoly, ApproxPolyMethod.DP, 4, true);
但是我不确定我可能做错了什么,因为它们没有存储在任何全局变量中,我希望在它们到达方法结束时释放内存。
可能是this bug,在这种情况下我怀疑我缺乏修复它的技术专业知识,因为除了在uni的几个课程之外,我还没有使用非托管代码。然而,我尝试在其他信息下实现它列出的修复程序,但是没有用,所以我想也许这不是我问题的原因。