Exemple #1
0
 public void Init()
 {
     using (var tracker = TrackerMOSSE.Create())
     {
         InitBase(tracker);
     }
 }
Exemple #2
0
 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);                 //初始化
        }