/* public void TestCodeBookBGModel() { using (Capture capture = new Capture()) using (BGCodeBookModel<Bgr> model = new BGCodeBookModel<Bgr>()) { ImageViewer viewer = new ImageViewer(); Image<Gray, byte> fgMask = capture.QueryFrame().Convert<Gray, Byte>(); Application.Idle += delegate(Object sender, EventArgs args) { Mat frame = capture.QueryFrame(); model.Apply(frame); viewer.Image = model.ForegroundMask; }; viewer.ShowDialog(); } } public void TestBlobTracking() { MCvFGDStatModelParams fgparam = new MCvFGDStatModelParams(); fgparam.alpha1 = 0.1f; fgparam.alpha2 = 0.005f; fgparam.alpha3 = 0.1f; fgparam.delta = 2; fgparam.is_obj_without_holes = 1; fgparam.Lc = 32; fgparam.Lcc = 16; fgparam.minArea = 15; fgparam.N1c = 15; fgparam.N1cc = 25; fgparam.N2c = 25; fgparam.N2cc = 35; fgparam.perform_morphing = 0; fgparam.T = 0.9f; BlobTrackerAutoParam<Bgr> param = new BlobTrackerAutoParam<Bgr>(); param.BlobDetector = new BlobDetector(Emgu.CV.CvEnum.BlobDetectorType.CC); param.FGDetector = new FGDetector<Bgr>(Emgu.CV.CvEnum.ForgroundDetectorType.Fgd, fgparam); param.BlobTracker = new BlobTracker(Emgu.CV.CvEnum.BLOBTRACKER_TYPE.MSFG); param.FGTrainFrames = 10; BlobTrackerAuto<Bgr> tracker = new BlobTrackerAuto<Bgr>(param); //MCvFont font = new MCvFont(Emgu.CV.CvEnum.FontFace.HersheySimplex, 1.0, 1.0); using(ImageViewer viewer = new ImageViewer()) using (Capture capture = new Capture()) { capture.ImageGrabbed += delegate(object sender, EventArgs e) { tracker.Process(capture.RetrieveBgrFrame()); //Image<Bgr, Byte> img = capture.RetrieveBgrFrame(); Image<Bgr, Byte> img = tracker.ForegroundMask.Convert<Bgr, Byte>(); foreach (MCvBlob blob in tracker) { img.Draw((Rectangle)blob, new Bgr(255.0, 255.0, 255.0), 2); img.Draw(blob.ID.ToString(), Point.Round(blob.Center), CvEnum.FontFace.HersheySimplex, 1.0, new Bgr(255.0, 255.0, 255.0)); } viewer.Image = img; }; capture.Start(); viewer.ShowDialog(); } }*/ public void TestCvBlob() { //MCvFont font = new MCvFont(Emgu.CV.CvEnum.FontFace.HersheySimplex, 0.5, 0.5); using (CvTracks tracks = new CvTracks()) using (ImageViewer viewer = new ImageViewer()) using (Capture capture = new Capture()) using (Mat fgMask = new Mat()) { //BGStatModel<Bgr> bgModel = new BGStatModel<Bgr>(capture.QueryFrame(), Emgu.CV.CvEnum.BG_STAT_TYPE.GAUSSIAN_BG_MODEL); BackgroundSubtractorMOG2 bgModel = new BackgroundSubtractorMOG2(0, 0, true); //BackgroundSubstractorMOG bgModel = new BackgroundSubstractorMOG(0, 0, 0, 0); capture.ImageGrabbed += delegate(object sender, EventArgs e) { Mat frame = new Mat(); capture.Retrieve(frame); bgModel.Apply(frame, fgMask); using (CvBlobDetector detector = new CvBlobDetector()) using (CvBlobs blobs = new CvBlobs()) { detector.Detect(fgMask.ToImage<Gray, Byte>(), blobs); blobs.FilterByArea(100, int.MaxValue); tracks.Update(blobs, 20.0, 10, 0); Image<Bgr, Byte> result = new Image<Bgr, byte>(frame.Size); using (Image<Gray, Byte> blobMask = detector.DrawBlobsMask(blobs)) { frame.CopyTo(result, blobMask); } //CvInvoke.cvCopy(frame, result, blobMask); foreach (KeyValuePair<uint, CvTrack> pair in tracks) { if (pair.Value.Inactive == 0) //only draw the active tracks. { CvBlob b = blobs[pair.Value.BlobLabel]; Bgr color = detector.MeanColor(b, frame.ToImage<Bgr, Byte>()); result.Draw(pair.Key.ToString(), pair.Value.BoundingBox.Location, CvEnum.FontFace.HersheySimplex, 0.5, color); result.Draw(pair.Value.BoundingBox, color, 2); Point[] contour = b.GetContour(); result.Draw(contour, new Bgr(0, 0, 255), 1); } } viewer.Image = frame.ToImage<Bgr, Byte>().ConcateVertical(fgMask.ToImage<Bgr, Byte>().ConcateHorizontal(result)); } }; capture.Start(); viewer.ShowDialog(); } }
protected override void inicializarVariaveis() { base.inicializarVariaveis(); mDetector = new Emgu.CV.VideoSurveillance.BackgroundSubtractorMOG2(); mBlobDetector = new CvBlobDetector(); Size vTamanhoDasImagens = mImagemColorida.Size; mImagemCinzaSemPlanoDeFundo = new Mat(); mImagemDoPlanoDeFundo = new Mat(vTamanhoDasImagens.Width, vTamanhoDasImagens.Height, DepthType.Cv32F, 3); mImagemSemPlanoDeFundo = null;// = cvCreateImage(gTamanhoDaImagem, IPL_DEPTH_32F, 3);; mCopiaImagemPlanoDeFundo = null; mImagemBinariaSemPlanoDeFundo = new Mat(); vHist = new Emgu.CV.UI.HistogramBox(); vHist.Show(); vHist.Visible = true; mPrimeiraExecucao = true; dicionarioMonitores = new Dictionary<int, MonitorDePessoa>(); dicionarioBlobs = new Dictionary<int, MCvBlob>(); }
public void mapear() { mDetector = new Emgu.CV.VideoSurveillance.BackgroundSubtractorMOG2(); mBlobDetector = new CvBlobDetector(); _capture = new Capture(mNomeDoArquivo); //_capture = new Capture(); inicializarKalman(); Application.Idle += ProcessFrame; }
public BackgroundSubtractProcessor() { _bg = new BackgroundSubtractorMOG2(10000, 2 * 2, true); BackgroundSubtractorMOG2Data data = (BackgroundSubtractorMOG2Data)Marshal.PtrToStructure(_bg.Ptr, typeof(BackgroundSubtractorMOG2Data)); data.nmixtures = 3; _thresholdWindow = new Window(); StackPanel pnl = new StackPanel(); pnl.Orientation = Orientation.Vertical; _thresholdWindow.Content = pnl; Slider thresSlides = new Slider(); thresSlides.Minimum = 0; thresSlides.Maximum = 100; thresSlides.ValueChanged += slider_ValueChanged; pnl.Children.Add(thresSlides); Slider thres2Slides = new Slider(); thres2Slides.Minimum = 0; thres2Slides.Maximum = 100; thres2Slides.ValueChanged += thres2Slides_ValueChanged; pnl.Children.Add(thres2Slides); _a.WindowStartupLocation = WindowStartupLocation.Manual; _a.Top = 0; _a.Left = 0; _a.Title = "a"; _a.Show(); _b.WindowStartupLocation = WindowStartupLocation.Manual; _b.Top = 0; _b.Left = _a.Width; _b.Title = "b"; _b.Show(); _c.WindowStartupLocation = WindowStartupLocation.Manual; _c.Top = 0; _c.Left = _a.Width * 2; _c.Title = "c"; _c.Show(); _d.WindowStartupLocation = WindowStartupLocation.Manual; _d.Top = _a.Height; _d.Left = 0; _d.Title = "d"; _d.Show(); _e.WindowStartupLocation = WindowStartupLocation.Manual; _e.Top = _a.Height; _e.Left = _a.Width; _e.Title = "e"; _e.Show(); for (int i = 0; i <= 80; i++) { _rightArmAngles.Add(i); } for (int i = 280; i <= 360; i++) { _rightArmAngles.Add(i); } for (int i = 0; i <= 100; i++) { _rightHandAngles.Add(i); } for (int i = 260; i <= 360; i++) { _rightHandAngles.Add(i); } for (int i = 100; i <= 260; i++) { _leftArmAngles.Add(i); } for (int i = 80; i <= 280; i++) { _leftHandAngles.Add(i); } //_thresholdWindow.Show(); }