roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 фев 2025, 06:00

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Работа с Contours
СообщениеДобавлено: 18 авг 2010, 20:36 
Не в сети

Зарегистрирован: 12 авг 2010, 00:17
Сообщения: 4
Есть список контуров contours
Необходимо получить список новый контуров sq_cards на основе старого(выкидывая по условию часть контуров). Вот на чем остановился:
Код:
CvSeq *contours=0;
cvFindContours(...);
while(contours)
            {
            if((cvContourPerimeter(contours)<MAXPERIMETR)&&(cvContourPerimeter(contours)>MINPERIMETR))
            {
               for(int i = 0; i < contours->total; i++ )
               {
                  cvSeqPush(sq_cards,(CvSeq*)cvGetSeqElem(contours, i));
               }                                              
            }   
                contours = (contours)->h_next;
            }

В результате получается один контур со множеством точек из всех необходимых контуров. А необходимо получить список из несколькох контуров. Как можно реализовать эту задачу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с Contours
СообщениеДобавлено: 18 авг 2010, 20:44 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Так надо по завершению копирования экземпляра 1 контура в sq_cards создавать новый контур, цеплять его в хвост sq_cards и начинать дальше писать в него. Короче вопрос не по компьютерному зрению, а по работе со списками в си++.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с Contours
СообщениеДобавлено: 18 авг 2010, 22:29 
Не в сети

Зарегистрирован: 12 авг 2010, 00:17
Сообщения: 4
Спасибо, буду разбираться

Добавлено спустя 21 минуту 45 секунд:
переработал, ошибок не выдает. Но контуры не рисует. Заранее спасибо, если укажите в чем ошибка и как ее исправить.
Код:
CvMemStorage* storage = cvCreateMemStorage(0);   
   //счетчик новых контуров
   int counter = 0;      
   //новый набор контуров      
   CvSeq* sq_cards = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvSeq), storage );
   while(contours)
            {
            //новый контур, который вставляется в набор контуров
            CvSeq* sq_item = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPoint), storage );
            if((cvContourPerimeter(contours)<MAXPERIMETR)&&(cvContourPerimeter(contours)>MINPERIMETR))
            {
               for(int i = 0; i < contours->total; i++ )
               {
                  //заносим точки в контур
                  cvSeqPush(sq_item,(CvSeq*)cvGetSeqElem(contours, i));
               }   
               counter++;
               //заносим в след элемент новый контур   
               sq_cards->h_next = sq_item;
               //переходим к следующему элементу для следующего прохода цикла
               sq_cards= sq_cards->h_next;               
            }            
                contours = (contours)->h_next;            
            }
   cvDrawContours(img_gray,sq_cards,color_red,color_blue,100,line_width);      
   cvShowImage( g_wnd_name, img_gray );
   cvWaitKey();


Добавлено спустя 49 минут 17 секунд:
Необходимость в этом отпала. Стал использовать апроксимирующие прямоугольники


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с Contours
СообщениеДобавлено: 18 авг 2010, 22:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Опять косяк при работе со списками - вы отправляете на прорисовку ссылку на последний еще пустой элемент списка.
Надо было запомнить первый указатель sq_cards после инициализации и его отправлять на прорисовку.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с Contours
СообщениеДобавлено: 18 авг 2010, 22:50 
Не в сети

Зарегистрирован: 12 авг 2010, 00:17
Сообщения: 4
Огромное спасибо!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO