garfeng/gocv_resource_tracker

Panic when GC

Closed this issue · 0 comments

func ResourceTrackerExamplePanic() {
	rt := gocv_resource_tracker.NewTracker()
	// defer rt.Close()

	mat := rt.IMRead("test.png", gocv.IMReadGrayScale)

	kernel := rt.GetStructuringElement(gocv.MorphEllipse, image.Pt(5, 5))
	erode := rt.NewMat()
	gocv.Erode(mat, &erode, kernel)

	thres := rt.NewMat()
	gocv.Threshold(erode, &thres, 0, 255, gocv.ThresholdOtsu)

	contours := rt.FindContours(thres, gocv.RetrievalList, gocv.ChainApproxNone)

	runtime.GC() // =============> Will cause panic. Because rt is deleted, and contours is Closed

	contoursNum := contours.Size()
	for i := 0; i < contoursNum; i++ {
		c := contours.At(i)
		area := gocv.ContourArea(c)
		if area > 10 {
			// do something
		}
	}
}