Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программа распознавания символов

    // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      Direct = West;
      cX--;
      // Может это самая левая координата?
      if (MinX > cX)
       MinX = cX;
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = East;
      cX++;
      if (MaxX < cX)
       MaxX = cX;

     }
    }
    break;

    // Восток
    case East:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      Direct = North;
      cY--;
      Line = (Byte*)FromImage->ScanLine[cY];
      // Может это самая верхняя точка?
      if (TopPoint.Y > cY)
      {
       TopPoint.Y = cY;
       TopPoint.X = cX;
      }
     }
     // Иначе поворачиваем "направо"
     else
     {

      Direct = South;
      cY++;
      Line = (Byte*)FromImage->ScanLine[cY];
      if (MaxY < cY)
       MaxY = cY;
     }
    }
    break;

    // Юг
    case South:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      Direct = East;
      cX++;
      if (MaxX < cX)
       MaxX = cX;
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = West;
      cX--;
      // Может это самая левая координата?
      if (MinX > cX)
       MinX = cX;
     }
    }
    break;

    // Запад
    case West:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      Direct = South;
      cY++;
      Line = (Byte*)FromImage->ScanLine[cY];
      if (MaxY < cY)
       MaxY = cY;
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = North;
      cY--;
      Line = (Byte*)FromImage->ScanLine[cY];
      // Может это самая верхняя точка?
      if (TopPoint.Y > cY)
      {
       TopPoint.Y = cY;
       TopPoint.X = cX;
      }
     }
    }
   }
  }

  TopPoint.X++;

  if ((!TopPoint.X) && (!TopPoint.Y))
  {
   TopPoint.X = X;
   TopPoint.Y = Y;
  }
  else
  {
   X = TopPoint.X;
   Y = TopPoint.Y;
  }

  // Постройка скелета
  ToLine = (Byte*)ToImage->ScanLine[Y];
  ToLine[X] = 0;

  // Поворачиваем налево (новое направление - юг)
  cX = X;
  cY = Y;

  Vertex.X = X;
  Vertex.Y = Y;
  ShapeVector.push_back(Vertex);

  Direct = East;
  Line = (Byte*)FromImage->ScanLine[cY];

  // Пока не придем в исходную точку, выделяем контур объекта
  do
  {
   // В зависимости от текущего направления движения жука
   switch (Direct)

   {
     // Север
    case North:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      ToLine = (Byte*)ToImage->ScanLine[cY];
      ToLine[cX] = 0;

      Vertex.X = cX;
      Vertex.Y = cY;
      if (Distance(Vertex, ShapeVector[ShapeVector.size() - 1]) >=
Treshold)
       ShapeVector.push_back(Vertex);

      Direct = West;
      cX--;
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = East;
      cX++;
     }
    }
    break;

    // Восток
    case East:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      ToLine = (Byte*)ToImage->ScanLine[cY];
      ToLine[cX] = 0;

      Vertex.X = cX;
      Vertex.Y = cY;
      if (Distance(Vertex, ShapeVector[ShapeVector.size() - 1]) >=
Treshold)
       ShapeVector.push_back(Vertex);

      Direct = North;
      cY--;
      Line = (Byte*)FromImage->ScanLine[cY];
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = South;
      cY++;
      Line = (Byte*)FromImage->ScanLine[cY];
     }
    }
    break;

    // Юг
    case South:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      ToLine = (Byte*)ToImage->ScanLine[cY];
      ToLine[cX] = 0;

      Vertex.X = cX;
      Vertex.Y = cY;
      if (Distance(Vertex, ShapeVector[ShapeVector.size() - 1]) >=
Treshold)
       ShapeVector.push_back(Vertex);

      Direct = East;
      cX++;
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = West;
      cX--;
     }
    }
    break;

    // Запад
    case West:
    {
     B = Line[cX];
     // Если элемент "черный", поворачиваем снова "налево"
     if (B < 255)
     {
      ToLine = (Byte*)ToImage->ScanLine[cY];
      ToLine[cX] = 0;

      Vertex.X = cX;
      Vertex.Y = cY;
      if (Distance(Vertex, ShapeVector[ShapeVector.size() - 1]) >=
Treshold)

       ShapeVector.push_back(Vertex);

      Direct = South;
      cY++;
      Line = (Byte*)FromImage->ScanLine[cY];
     }
     // Иначе поворачиваем "направо"
     else
     {
      Direct = North;
      cY--;
      Line = (Byte*)FromImage->ScanLine[cY];
     }
    }
   }
  } while ((cX != X) || (cY != Y));

  Vertex.X = X;
  Vertex.Y = Y;
  ShapeVector.push_back(Vertex);

  ToImage->Canvas->Pen->Color = clRed;
  ToImage->Canvas->MoveTo(ShapeVector[0].X, ShapeVector[0].Y);
  for (UINT i = 1; i < ShapeVector.size(); i++)
  {
   ToImage->Canvas->LineTo(ShapeVector[i].X, ShapeVector[i].Y);
  }

  for (UINT i = 0; i < ShapeVector.size(); i++)
  {
   ShapeVector[i].X -= MinX;
   ShapeVector[i].Y -= Y;
  }

/*

  if (Symb == 'Й')
  {
   Symb++;
  }

  if (Symb == 'а')
  {
   // Symb = 'A';
   break;
  }

  if ((Symb != 'Ы') && (!SkipMode))
  {
   AnsiString FileName = ExtractFilePath(Application->ExeName) + "TPL";
   FileName += Symb;

   ofstream OutFile(FileName.c_str());
   for (UINT i = 0; i < ShapeVector.size(); i++)
   {
    OutFile << IntToStr(ShapeVector[i].X).c_str() << endl;
    OutFile << IntToStr(ShapeVector[i].Y).c_str() << endl;
   }
   OutFile.close();

   Symb++;
  }
  else
  {
   if (SkipMode)
   {
    SkipMode = false;
    Symb++;
   }
   else if (Symb == 'Ы')
    SkipMode = true;
  }
*/

  TTemplate* Template = FindTemplate(ShapeVector);
  if (Template)
   Result += Template->Symb;
 }

 //OSRForm->Show();
 delete OSRForm;

 Memo1->Text = Result;
}
//--------------------------------------------------------------------------
-
TTemplate* FindTemplate(TShapeVector Vec)
{
 TTemplate Template;
 Template.Vec = Vec;
 for (UINT i = 0; i < Templates.size(); i++)
 {
  if (Templates[i] == Template)
   return &Templates[i];
 }

 return NULL;
}


12
скачать работу

Программа распознавания символов

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ