void SearchNumber( IplImage* img, CvSeq* squares ) // CvSeq хранит данные о контуре 
{
   char* NameWnd2 = "Nomer";
   cvNamedWindow( "Nomer", CV_WINDOW_AUTOSIZE );
    CvSeqReader reader;
    IplImage* cpy = cvCloneImage( img );
    int i,j;
   CvPoint pt1;
   CvFont font;
   CvSize text_size;
   pt1.x = 100;
   pt1.y = 100;
   cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX, 0.5, 0.5, 0.0, 0, CV_AA );
   cvGetTextSize( "1", &font, &text_size, 0 );
    // initialize reader of the sequence
    cvStartReadSeq( squares, &reader, 0 );
  //  cvSeqRemove( squares, 10);
    // читать 4 последовательности элементов (все вершины)
    for( i = 0; i < squares->total; i += 4 )
    {
        CvPoint pt[4], *rect = pt; // Массив точем массива контура
        int count = 4;
        
        // Читать 4 вершины
        CV_READ_SEQ_ELEM( pt[0], reader ); //
        CV_READ_SEQ_ELEM( pt[1], reader ); // Считывание точек вершин
        CV_READ_SEQ_ELEM( pt[2], reader ); //
        CV_READ_SEQ_ELEM( pt[3], reader ); //
        
 //Поиск вершин по которым будут строится новый квадрат изображения
      int c,gip,max,min;
      max=0;
      min=10000;
      CvPoint MaxPoint;
      CvPoint MinPoint;
      MaxPoint.x=1; MaxPoint.y=1;
      MinPoint.x=1; MinPoint.y=1;
////Далее собсно идет мой алгоритм поиска двух вершин по которым будет строится область ROI ....
////Алгоритм крив и косячен до ужоса >_<   Может есть какая-то функция заменяющая весь этот ужс???)
           for( j=0; j<4; j++ )
         {         
             gip= (int)sqrt ((double)((pt[j].x)*(pt[j].x)+(pt[j].y)*(pt[j].y)));
               if ((gip > max)&&((pt[j].y)>(MaxPoint.y))) 
            {
               max = gip;
               MaxPoint = pt[j];
            } 
            if ((gip < min)&&((pt[j].y)<(MaxPoint.y)))
            {
               min = gip;
               MinPoint = pt[j];
            }
            printf("(%d,%d)\n", pt[j].x, pt[j].y );
            printf("Gipotinuza =   %d,\n",gip);
        }
          printf("MaX =  %d,%d\n",MaxPoint.x,MaxPoint.y);
                printf("MiN =  %d,%d\n",MinPoint.x,MinPoint.y);
         cvSetImageROI(img, cvRect(MinPoint.x,MinPoint.y,MaxPoint.x,MaxPoint.y));
                         ////Запись квадрата в память как JPG вайл
            char buffer[50];                                          
            itoa(i,buffer,10);       
            strcat(buffer,".jpg");
            printf("Imia Faila: %s\n", buffer);    
             if(!cvSaveImage(buffer, img))      
             {
               printf("Невозможно записать файл изображения\n");
             }
         cvShowImage( NameWnd2, img );
         cvResetImageROI(img);
          printf("************************\n");
   
         /////Вывод номеров вершин
         for( j=0; j<4; j++ ) 
         {         
         char buffer[50];                                          
         itoa(j+1,buffer,10);       
         cvPutText(cpy, buffer, pt[j], &font, CV_RGB(255,1,1));
         }
   }
    // Вывод изображения
    cvShowImage( wndname, cpy );
    cvReleaseImage( &cpy ); //Освобождение памяти
}