Перейти к содержимому
Compvision.ru

artemopolus31

Пользователи
  • Количество публикаций

    4
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О artemopolus31

  • Звание
    Новичок
  1. Работа с контурами

    Отлично! Я нашел решение проблемы. При создании sequence надо делать так: CvSeq* seq = cvCreateSeq( (CV_SEQ_FLAG_CLOSED|CV_SEQ_KIND_CURVE|CV_SEQ_ELTYPE_POINT), sizeof(CvContour), sizeof(CvPoint), storage ); Что делает ее полигоном!
  2. Работа с контурами

    я так понял проблема в характеристиках контура. Функция CvMoments с этим контуром вообще пишет ошибку. Не проходит определение #define CV_IS_SEQ_POLYGON( seq ) \ (CV_IS_SEQ_POLYLINE(seq) && CV_IS_SEQ_CLOSED(seq)) где #define CV_IS_SEQ_POLYLINE( seq ) \ (CV_SEQ_KIND(seq) == CV_SEQ_KIND_CURVE && CV_IS_SEQ_POINT_SET(seq)) и #define CV_IS_SEQ_CLOSED( seq ) (((seq)->flags & CV_SEQ_FLAG_CLOSED) != 0) получается мой контур не полигон) И как его сделать полигоном?
  3. Работа с контурами

    В squares.c вручную рисуют контур, тут проблем нет - считывается из массива все прекрасно. В convexhull.c тоже ничего не нашел. Проблема в том, что cvDrawContours ничего не рисует, и почему так происходит я понять не могу. Думаю, что проблема со списком CvSeq... Но пока ничего поделать с этим не могу. Может с указателем на первый контур что-то не так?
  4. Работа с контурами

    Здравствуйте. У меня небольшая проблема - создаю контур cvSeq, а потом рисую его с помощью cvDrawContours, но ничего программа не рисует. Вот код: int main(int argc, char** argv) { IplImage* src; const char* main_name = "Workspace"; src = cvCreateImage(cvSize( 400, 400), 8, 3); cvZero(src); CvScalar color = CV_RGB( 200,0,0); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* seq = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvPoint), storage ); CvSeqWriter writer; //CvSeqReader reader; int i; cvStartAppendToSeq( seq, &writer ); CvPoint pt = cvPoint(20,20); CV_WRITE_SEQ_ELEM( pt, writer ); printf("[%d,%d] is written\n", pt.x, pt.y ); pt = cvPoint(30,50); CV_WRITE_SEQ_ELEM( pt, writer ); printf("[%d,%d] is written\n", pt.x, pt.y ); pt = cvPoint(50,60); CV_WRITE_SEQ_ELEM( pt, writer ); printf("[%d,%d] is written\n", pt.x, pt.y ); pt = cvPoint(45,30); CV_WRITE_SEQ_ELEM( pt, writer ); printf("[%d,%d] is written\n", pt.x, pt.y ); cvEndWriteSeq( &writer ); for (i = 0;i<4;i++) { CvPoint* pts = (CvPoint*) cvGetSeqElem(seq, i); printf("[%d,%d] is read\n", pts->x, pts->y ); } cvDrawContours( src, seq, color, color,0,3,8); cvCircle( src, pt, 8, color,1,8,0); cvNamedWindow( main_name, 1); cvShowImage( main_name, src); cvWaitKey(0); return 0; }[/codebox]
×