Привет народ!) Разрабатываю систему распознавания автомобильных номерных знаков, использую библиотеку OpenCV. Алгоритм пока, что прост)... 1. Программа находит все прямоугольные элементы на фотографии (за основу взят стандартный пример из сэмплов по обнаружению парямоугольников) 2. Бинаризация изображений (т.е бинаризуются все найденые прямоугольные области функцией Threeshold) 3. Анализ каждого прямоугольника на кол-во белого цвета (Таким способом выявляется прямоугольник с номерным знаком) 4. Сегментация прямоугольника с номером 5. Распознавание символов. Итак вопросы следующие: 1. Как можно обращаться к бинаризованному изображению попиксельно?...никак не могу въехать( 2. Прямоугольники, которые были получены, хранятся в CvSeq*.Как можно вывести изображения находящееся в области каждого прямоугольника? Вот пример моей реализации...но там всплыла куча подводных камней...может есть какие-то стандартные функции для этого...может я зря страдаю...)?? 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 ); //Освобождение памяти } Очень надеюсь на вашу помощ...