2

Это функция, которая определяет, находится ли точка в пределах границы изображения и проверяет, совпадает ли она с другим кругом.Оптическое распознавание знаков с использованием C#

Если он возвращает true, тогда я проверяю порог круга, заполненного черным, и позже сохраняем точку, которая заполняется более чем на 90% в список точек.

Моя программа работает в 2 этапа

1) Если она образует круг с не перекрывающихся.

2) Если оно заполнено на 90%.

У меня возникла ошибка: если я передаю изображение только с одним кругом, он сохраняет 1408 кругов. Я понятия не имею, что я делаю неправильно.

Ниже событие нажатия кнопки

 for (int i = 0; i < 50; i++) 
     { 
      for (int j = 0; j < 50; j++) 
      { 
       p.X = j; 
       p.Y = i; 
       if (isCircle(p)) 
       { 

        if (checkThreshold(p) > 90) 
        { 
         pts.Insert(0, p); 
        } 
       } 
      } 
     } 

Ниже приведены и функции

private bool isCircle(Point p) 
    { 

     double count = 0; 
     Point curP = new Point(); 
     //Point centre = new Point(24, 20); 
     int a = 0; 

     boundary.X = 50; 
     boundary.Y = 50; 

     for (int x = (p.X - radius); x <= (p.X - radius); x++) 
     { 
      for (int y = (p.Y - radius); y <= (p.Y - radius); y++) 
      { 
       if ((x < boundary.X) && (y < boundary.Y) && (x + radius < boundary.X) && (y + radius < boundary.Y)) 
       { 
        curP.X = 0; 
        curP.Y = 0; 

        curP.X = x; 
        curP.Y = y; //stores new point to be sent in curP 
        while (a < pts.Count) 
        { 
         //point , centre, radius 
         if (checkOverlap(curP, pts[a], radius) == false) //send point to check if it overlaps or not 
         { 
          // MessageBox.Show("yellow"); 
          count = 1; 
          break; 
         } 
         else 
         { 
          a++; 
         } 

        } 

       } 
       if (count == 1) 
        break; 
      } 
      if (count == 1) 
       break; 

     } 

     if (count == 1) 
      return true; 

     else return false; 
    } 

Ниже Предоставленная функция checkOverlap

private bool checkOverlap(Point p, Point c, int radii) 
    { 

     Point listPoint; 

     listPoint = p; 

     //the following if condition checks if the point resides in the list or not 

     if ((((c.X - radii) < listPoint.X) && (listPoint.X > (c.X - radii))) && (((c.Y - radii) < listPoint.Y) && (listPoint.Y > (c.Y - radii)))) 
     { 
      if ((((p.X - c.X) * (p.X - c.X)) - ((p.Y - c.Y) * (p.Y - c.Y))) < (radius * radius)) 
      { 
       return false; 
      } 
      return true; 
     } 
     else 
      return true; 
    } 

ответ

0

Не уверен, если это вопрос, но ваша переменная count должна быть int к тому, как вы проверяете на равенство.

 Смежные вопросы

  • Нет связанных вопросов^_^