1

そのため、 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);

ただし、グローバル変数に保存されていないため、メソッドの最後に到達するとメモリが解放されると予想されるため、何が間違っているのかわかりません。

このバグである可能性があります。その場合、大学でのいくつかのコースを除いて、アンマネージ コードを使用したことがないため、それを修正するための技術的な専門知識が不足していると思われます。ただし、追加情報の下にリストされている修正を実装しようとしましたが、うまくいかなかったので、問題の原因ではないのではないかと考えています。

4

0 に答える 0