protected override void desenharEMapear() { List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>(); foreach (var blob2 in mblobs.Values) { MCvBlob blob = new MCvBlob(); blob.Center = blob2.Centroid; blob.Size = blob2.BoundingBox.Size; if (verificarSeEhTamanhoDePessoa(blob.Size.Height, blob.Size.Width, blob.Center.X, blob.Center.Y)) { MonitorDePessoa vMonitorAtual = obterMonitorDePessoa(blob); blob.ID = vMonitorAtual.obterIdentificador(); vMonitorAtual.adicionarNovoBlob(blob, base.mContadorDeFrames); List <Point> vPontos = vMonitorAtual.obterPontos(); //desenharCaminho(vPontos); Point p1 = new Point((int)((blob.Center.X - blob.Size.Width / 2) * 0.98), (int)((blob.Center.Y - blob.Size.Height / 2) * 0.98)); Point p2 = new Point((int)((blob.Center.X + blob.Size.Width / 2) * 1.08), (int)((blob.Center.Y + blob.Size.Height / 2) * 1.08)); MCvScalar corTexto = new MCvScalar(0, 255, 0, 0); Point[] pontosKalman = aplicarFiltroKalman(blob); corTexto = new MCvScalar(255, 0, 0, 0); vMonitorAtual.adicionarPontoKalman(pontosKalman[1]); //CvInvoke.cvRectangle(mImagemColorida, p1, p2, corTexto, 1, LINE_TYPE.CV_AA, 0); CvInvoke.Rectangle(mImagemColorida, blob2.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2); p1.Y = p1.Y - 10; escreverId(blob.ID.ToString(), p1, corTexto); vPessoasEmCena.Add(vMonitorAtual); } } parametros.PontosAreaRestrita = mJanelaAreaRestrita.obterPontos(); desenharCaminho(parametros.PontosAreaRestrita, new MCvScalar(0, 0, 255.0, 0)); mJanelaAreaRestrita.GridPessoasMonitoradas.Rows.Clear(); foreach (MonitorDePessoa vPessoa in vPessoasEmCena) { DataGridViewRow vNovaLinha = new DataGridViewRow(); vNovaLinha.CreateCells(mJanelaAreaRestrita.GridPessoasMonitoradas, new String[] { vPessoa.obterIdentificador().ToString(), vPessoa.obterVelocidadeMetroPorSegundo().ToString(), vPessoa.obterVelocidadeKmPorHora().ToString(), vPessoa.obterTempoEmCena().ToString(), vPessoa.obterNumeroDeInversoes().ToString(), "MAPEANDO..." }); vNovaLinha.DefaultCellStyle.BackColor = Color.Green; vNovaLinha.DefaultCellStyle.SelectionBackColor = vNovaLinha.DefaultCellStyle.BackColor; if (mJanelaAreaRestrita.GridPessoasMonitoradas.ColumnCount > 0) { mJanelaAreaRestrita.GridPessoasMonitoradas.Rows.Add(vNovaLinha); } } if (!mJanelaAreaRestrita.Visible) { mFinalizar = true; } }
private void desenharRetanguloPessoa() { List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>(); foreach (var blob2 in mblobs.Values) { MCvBlob blob = new MCvBlob(); blob.Center = blob2.Centroid; blob.Size = blob2.BoundingBox.Size; if (verificarSeEhTamanhoDePessoa(blob.Size.Height, blob.Size.Width, blob.Center.X, blob.Center.Y)) { MonitorDePessoa vMonitorAtual = obterMonitorDePessoa(blob); blob.ID = vMonitorAtual.obterIdentificador(); vMonitorAtual.adicionarNovoBlob(blob, base.mContadorDeFrames); List <Point> vPontos = vMonitorAtual.obterPontos(); desenharCaminho(vPontos, new MCvScalar(0, 0, 255.0, 0)); desenharCaminho(vMonitorAtual.obterPontosKalman(), new MCvScalar(0, 0, 255.0, 0)); Point p1 = new Point((int)((blob.Center.X - blob.Size.Width / 2) * 0.98), (int)((blob.Center.Y - blob.Size.Height / 2) * 0.98)); Point p2 = new Point((int)((blob.Center.X + blob.Size.Width / 2) * 1.08), (int)((blob.Center.Y + blob.Size.Height / 2) * 1.08)); MCvScalar corTexto; parametros.RetanguloPessoa = new Rectangle(new Point(p1.X, p2.Y), new Size(p2.X - p1.X, p2.Y - p1.Y)); // if (verificarSeEhTamanhoDePessoa(parametros.RetanguloPessoa)) if (true) { Point[] pontosKalman = aplicarFiltroKalman(blob); corTexto = new MCvScalar(255, 0, 0, 0); vMonitorAtual.adicionarPontoKalman(pontosKalman[1]); CvInvoke.Rectangle(mImagemColorida, blob2.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2); CvInvoke.Line(mImagemColorida, pontosKalman[0], pontosKalman[0], new MCvScalar(255.0, 0, 0, 0), 3); CvInvoke.Line(mImagemColorida, pontosKalman[1], pontosKalman[1], new MCvScalar(0, 0, 255.0, 0), 3); p1.Y = p1.Y - 10; escreverId(blob.ID.ToString(), p1, corTexto); vPessoasEmCena.Add(vMonitorAtual); } } } }
public void desenharEprocessar() { if (parametros.PontosAreaRestrita != null && parametros.PontosAreaRestrita.Count > 0) { for (int i = 1; i < parametros.PontosAreaRestrita.Count; i++) { //CvInvoke.cvLine(mImagemColorida, parametros.PontosAreaRestrita[i - 1], parametros.PontosAreaRestrita[i], new MCvScalar(255, 0, 0, 0), 1, LINE_TYPE.CV_AA, 0); CvInvoke.Line(mImagemColorida, parametros.PontosAreaRestrita[i - 1], parametros.PontosAreaRestrita[i], new MCvScalar(255, 0, 0, 0), 1, LineType.AntiAlias, 0); } } List <MonitorDePessoa> vPessoasEmCena = new List <MonitorDePessoa>(); foreach (CvBlob blob2 in mblobs.Values) { MCvBlob blob = new MCvBlob(); blob.Center = blob2.Centroid; blob.Size = blob2.BoundingBox.Size; if (verificarSeEhTamanhoDePessoa(blob.Size.Height, blob.Size.Width, blob.Center.X, blob.Center.Y) || verificarExistenciaBlob(blob) != 0) { MonitorDePessoa vMonitorAtual = obterMonitorDePessoa(blob); blob.ID = vMonitorAtual.obterIdentificador(); vMonitorAtual.adicionarNovoBlob(blob, base.mContadorDeFrames); List <Point> vPontos = vMonitorAtual.obterPontos(); // desenharCaminho(vPontos); Point p1 = new Point((int)((blob.Center.X - blob.Size.Width / 2) * 0.98), (int)((blob.Center.Y - blob.Size.Height / 2) * 0.98)); Point p2 = new Point((int)((blob.Center.X + blob.Size.Width / 2) * 1.08), (int)((blob.Center.Y + blob.Size.Height / 2) * 1.08)); MCvScalar corTexto; parametros.RetanguloPessoa = new Rectangle(new Point(p1.X, p2.Y), new Size(p2.X - p1.X, p2.Y - p1.Y)); if (vMonitorAtual.verificarSePossuiComportamentoSuspeito(parametros).Suspeito) { corTexto = new MCvScalar(0, 0, 255, 0); } else { corTexto = new MCvScalar(0, 255, 0, 0); } Point[] pontosKalman = aplicarFiltroKalman(blob); corTexto = new MCvScalar(255, 0, 0, 0); vMonitorAtual.adicionarPontoKalman(pontosKalman[1]); //CvInvoke.cvRectangle(mImagemColorida, p1, p2, corTexto, 1, LINE_TYPE.CV_AA, 0); CvInvoke.Rectangle(mImagemColorida, blob2.BoundingBox, new MCvScalar(255.0, 255.0, 255.0), 2); p1.Y = p1.Y - 10; escreverId(blob.ID.ToString(), p1, corTexto); vPessoasEmCena.Add(vMonitorAtual); } } mJanelaMonitoramento.GridPessoasMonitoradas.Rows.Clear(); foreach (MonitorDePessoa vPessoa in vPessoasEmCena) { if (!mJanelaMonitoramento.Visible) { return; } RespostaVerificacao resposta = vPessoa.verificarSePossuiComportamentoSuspeito(parametros); DataGridViewRow vNovaLinha = new DataGridViewRow(); vNovaLinha.CreateCells(mJanelaMonitoramento.GridPessoasMonitoradas, new String[] { vPessoa.obterIdentificador().ToString(), vPessoa.obterVelocidadeMetroPorSegundo().ToString(), vPessoa.obterVelocidadeKmPorHora().ToString(), vPessoa.obterTempoEmCena().ToString(), vPessoa.obterNumeroDeInversoes().ToString(), resposta.Mensagem }); vNovaLinha.DefaultCellStyle.BackColor = resposta.Suspeito ? Color.Red : Color.Green; vNovaLinha.DefaultCellStyle.SelectionBackColor = vNovaLinha.DefaultCellStyle.BackColor; mJanelaMonitoramento.GridPessoasMonitoradas.Rows.Add(vNovaLinha); } mSalvarImagem = mJanelaMonitoramento.SalvarImagem; mJanelaMonitoramento.SalvarImagem = false; }