Перейти к содержимому
Compvision.ru

Amar

Пользователи
  • Количество публикаций

    1
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Amar


  1. В 16.12.2016 at 00:17, Король сказал:

    Для примера выложу свой код, как удалять не нужные блобы(Rectangle) правда пока написано только на C#. Сначало рекомендуется вычислить угол поворота изображения. А потом уже удалять прямоугольники. Функция GetRect удаляет не нужные прямоугольники за линией (зеленой).  IsPlate - проверяет гражданский ли автомобиль состоящий из 8 или 9 символов. Может быть поможет мой код.

    p.s.Функция CLAHE - очень помогла на плохо освещенных номерах и переосвещенных.

     public List<System.Drawing.Rectangle> GetRect(int i, List<System.Drawing.Rectangle> rec)
            {
                float sum = 0.0f;
                for (int ij = 0; ij < rec.Count; ij++)
                {
                    sum += rec[ij].Y + rec[ij].Height;
                }
                float sredY = sum / rec.Count;
                Plate.rotate2.Draw(new LineSegment2DF(new System.Drawing.PointF(0, sredY), new System.Drawing.PointF(Plate.rotate2.Width, sredY)), new Bgr(System.Drawing.Color.Green), 2);

                for (int kl = 0; kl < rec.Count; kl++)
                {
                    if (System.Math.Abs(sredY - (rec[kl].Y + rec[kl].Height)) > 8)
                    {
                        rec.Remove(rec[kl]);
                        
                    }
                }

                float sredX = 0.0f;
                for (int kl = 0; kl < rec.Count; kl++)
                {
                    sredX += rec[kl].Width;
                }
                sredX = sredX / rec.Count;

                for (int lp = 0; lp < rec.Count; lp++)
                {
                    if (System.Math.Abs(sredX - rec[lp].Width) > 10 && rec[lp].Height / rec[lp].Width < 1.5)
                    {
                        rec.Remove(rec[lp]);
                        
                    }
                }
                
                return rec;
            }

            bool IsPlate(int i, List<System.Drawing.Rectangle> rect)
            {
                float sum = 0.0f;
                for (int ij = 0; ij < rect.Count; ij++)
                {
                    sum += rect[ij].Y + rect[ij].Height;
                }
                float sredY = sum / rect.Count;

                int index = 0;
                for (int kl = 0; kl < rect.Count; kl++)
                {
                    if (System.Math.Abs(sredY - (rect[kl].Y + rect[kl].Height)) < 8)
                        index++;
                }

                float sredX = 0.0f;
                for (int kl = 0; kl < rect.Count; kl++)
                {
                    sredX += rect[kl].Width;
                }
                sredX = sredX / rect.Count;

                int index2 = 0;
                for (int lp = 0; lp < rect.Count; lp++)
                {
                    if (System.Math.Abs(sredX - rect[lp].Width) < 10)
                        index2++;
                }

                if ((index == 8 && index2 == 8) || (index == 9 && index2 == 9))
                    return true;
                return false;
            }

    0.jpg

    2.jpg

    3.jpg

    Привет можно дайте мне исходник ?

×