public void Init() { using (var tracker = TrackerMOSSE.Create()) { InitBase(tracker); } }
public void Update() { using (var tracker = TrackerMOSSE.Create()) { UpdateBase(tracker); } }
public static void TrackObject() { var tracker = TrackerMOSSE.Create(); var cap = new VideoCapture(); cap.Open(0); var image = new Mat(); cap.Read(image); Cv2.ImShow("Debug", image); var bbox = Cv2.SelectROI("Tracking", image, false); var bbox2d = new Rect2d(bbox.X, bbox.Y, bbox.Width, bbox.Height); tracker.Init(image, bbox2d); while (true) { var timer = Cv2.GetTickCount(); var img = new Mat(); var success = cap.Read(img); success = tracker.Update(img, ref bbox2d); if (success) { DrawBox(img, bbox2d); } else { Cv2.PutText(img, "Lost", new OpenCvSharp.Point(100, 75), HersheyFonts.HersheySimplex, 0.7, new Scalar(0, 255, 0), 2); } Cv2.Rectangle(img, new OpenCvSharp.Point(15, 15), new OpenCvSharp.Point(200, 90), new Scalar(255, 0, 255), 2); Cv2.PutText(img, "Fps:", new OpenCvSharp.Point(20, 40), HersheyFonts.HersheySimplex, 0.7, new Scalar(255, 0, 255), 2); Cv2.PutText(img, "Status:", new OpenCvSharp.Point(20, 70), HersheyFonts.HersheySimplex, 0.7, new Scalar(255, 0, 255), 2); var fps = (int)(Cv2.GetTickFrequency() / (Cv2.GetTickCount() - timer)); Scalar myColor; if (fps > 60) { myColor = new Scalar(20, 230, 20); } else if (fps > 20) { myColor = new Scalar(230, 20, 20); } else { myColor = new Scalar(20, 20, 230); } Cv2.PutText(img, fps.ToString(), new OpenCvSharp.Point(75, 40), HersheyFonts.HersheySimplex, 0.7, myColor, 2); Cv2.ImShow("Tracking", img); if (Cv2.WaitKey(1) == 113) { Cv2.DestroyWindow("Tracking"); break; } } }
TrackerMOSSE Tracker; //追踪算法 /// <summary> /// 更新跟踪目标 /// </summary> public void updateTracker() { while (cal) { ; //等 } tgt = bbox; //设置跟踪框 if (Tracker != null) { Tracker.Dispose(); //毙了之前的进程 } GC.Collect(); //资源回收 Tracker = TrackerMOSSE.Create(); //设置新的跟踪进程 Tracker.Init(src, tgt); //初始化 }