roboforum.ru

Технический форум по робототехнике.


Выделение и распознавание автомобильного номерного знака

Re: Выделение и распознавание автомобильного номерного знака

Сообщение avr123.nm.ru » 06 июн 2009, 10:38

РЭНТ писал(а):Нашел ошибку из за которого не получалось вывести изображение...

Мог бы ты выложить свой проект как рабочий пример и написать что и где надо скачать и установить на ПК - я этим не занимался и не понимаю ни чего, но хотелось бы попробовать. Наверно и многим еще захочется.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Выделение и распознавание автомобильного номерного знака

Сообщение РЭНТ » 06 июн 2009, 20:55

2avr123.nm.ru я пока просто разбираюсь с функциями OpenCV, как только напишу хотя бы основу обязательно выложу исходники)
Почитать про OpenCV можно здесь http://imageprocessing.su/?cat=3 там же можно найти и ссылку на скачивание)
Про установку и настройку я писал в этой ветки форума, в конце viewtopic.php?f=51&t=6066
Аватара пользователя
РЭНТ
 
Сообщения: 14
Зарегистрирован: 02 июн 2009, 21:56
Откуда: Воронеж
прог. языки: Pascal, C++, Max Scripting
ФИО: Артем Проскурин

Re: Выделение и распознавание автомобильного номерного знака

Сообщение avr123.nm.ru » 06 июн 2009, 21:03

Спасибо. Почитать то много где есть и на робофоруме тоже. Я подожду проектика "с жару с пылу" чтоб запустить и вопросы задать автору пока не убег :D
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Выделение и распознавание автомобильного номерного знака

Сообщение РЭНТ » 09 июн 2009, 20:23

Народ подскажите!)Взял из samples пример по распознаванию прямоугольников на фото...понравился он мне) В принципе номерной знак он обводит без проблем, но вот беда, он еще кое какие предметы прямоугольные обводит(например фары..и т.д.). Решил следующим шагом брать каждый найденный прямоугольник, бинаризовать его(т.е. переводить в ч/б, например функцией cvThreshold) и анализировать на количество белого цвета(таким образом хочу отбраковать все прямоугольники которые не номерной знак)
Итак вопрос!):
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 ); //Освобождение памяти
}
Аватара пользователя
РЭНТ
 
Сообщения: 14
Зарегистрирован: 02 июн 2009, 21:56
Откуда: Воронеж
прог. языки: Pascal, C++, Max Scripting
ФИО: Артем Проскурин

Re: Выделение и распознавание автомобильного номерного знака

Сообщение РЭНТ » 10 июн 2009, 23:30

Хех...видимо никто не знает...хех..жалко(((
Аватара пользователя
РЭНТ
 
Сообщения: 14
Зарегистрирован: 02 июн 2009, 21:56
Откуда: Воронеж
прог. языки: Pascal, C++, Max Scripting
ФИО: Артем Проскурин

Re: Выделение и распознавание автомобильного номерного знака

Сообщение РЭНТ » 14 июн 2009, 11:44

С прошлой батвой вродь разобрался :)

Подскажите народ, понимаю что вопрос избитый, но что-то ничего не помагет...

Получаю путь к файлу через:
CString fname;
fname = dlgOpen.GetPathName();

Как CString перевести в char* ???
Аватара пользователя
РЭНТ
 
Сообщения: 14
Зарегистрирован: 02 июн 2009, 21:56
Откуда: Воронеж
прог. языки: Pascal, C++, Max Scripting
ФИО: Артем Проскурин

Re: Выделение и распознавание автомобильного номерного знака

Сообщение boez » 15 июн 2009, 10:23

Подозреваю, что должен быть метод типа .c_str(), как у стандартных STL-евских строк.

Гугл считает, что CString - это такие дамские трусы :)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Выделение и распознавание автомобильного номерного знака

Сообщение Duhas » 15 июн 2009, 11:43

:lol: :lol: :ROFL: :ROFL: :D
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Выделение и распознавание автомобильного номерного знака

Сообщение Digit » 15 июн 2009, 12:02

:good: :D
Почитал - порадовался :)
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Выделение и распознавание автомобильного номерного знака

Сообщение РЭНТ » 15 июн 2009, 18:16

> Гугл считает, что CString - это такие дамские трусы :)

))) :D Чиво смеетесь?)) Есь ток начинаю на Сях кодить что уж поделаешь... вот и вопросы такие.. :)
Аватара пользователя
РЭНТ
 
Сообщения: 14
Зарегистрирован: 02 июн 2009, 21:56
Откуда: Воронеж
прог. языки: Pascal, C++, Max Scripting
ФИО: Артем Проскурин

Re: Выделение и распознавание автомобильного номерного знака

Сообщение galex1981 » 15 июн 2009, 18:59

Дамские трусы это c-string :D
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Пред.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8