Я пишу код C ( not C ++) для запуска выпуклой оболочки по контурам прямоугольников. Код (очень упрощенный) для этого выглядит следующим образом:
CvSeq* contours;
CvSeq* hull;
cvFindContours( img, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, CvPoint(0,0) );
hull = cvConvexHull2( contours, storage, CV_CLOCKWISE, 0 );
Где img
и contours
оба действительны. Между этими строками намного больше, но часть FindContours была протестирована на работу.
Этот код выдает исключение: Ошибка: неверный аргумент (неподдерживаемый тип последовательности) в cvApproxPoly .
Я сказал , что проблема в том, что флаг, который идентифицирует последовательность как ломаную линию, не установлен, и я попробовал предложение hull->flags = hull->flags | 512
, но предположительно флаги изменились где-то между 2008 и теперь, так как это не работает.
Таким образом, вопрос заключается в следующем: как использовать cvApproxPoly () для результатов cvConvexHull2 ()? Какой тип данных мне следует использовать, и каковы надлежащие аргументы для cvApproxPoly ()?