Оболочка C ++ выпуклости и дефектов (OpenCV)? - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь создать оболочку C ++ для OpenCV, но, к сожалению, не могу заставить ее работать.Я продолжаю получать ту же ошибку снова и снова: «Ошибка OpenCV: неверный аргумент (выпуклая оболочка не является ни последовательностью, ни матрицей)».Я не очень понимаю, почему.

Вот код:

   void convexityDefects (vector <vector<Point> > contour, vector <vector<int> > convexHullPoints, vector <vector<Point> > *convexHullDefects)
   {
        CvSeq *contourSeq;
        CvSeq *convexHullDefectsSeq;
        CvSeq *convexHullSeq;

        CvMemStorage *contourSeqStorage = cvCreateMemStorage (0);
        CvMemStorage *convexHullSeqStorage = cvCreateMemStorage (0);
        CvMemStorage *convexHullDefectsSeqStorage = cvCreateMemStorage (0);
        CvMemStorage *cvConvexityDefectsStorage = cvCreateMemStorage (0);

        contourSeq = cvCreateSeq (CV_SEQ_KIND_GENERIC | CV_32SC2, sizeof (CvSeq), sizeof (CvPoint), contourSeqStorage);
        convexHullDefectsSeq = cvCreateSeq (CV_SEQ_KIND_GENERIC, sizeof (CvSeq), sizeof (CvPoint), convexHullDefectsSeqStorage);
        convexHullSeq = cvCreateSeq (CV_SEQ_KIND_GENERIC, sizeof (CvSeq), sizeof (int), convexHullSeqStorage);

        for (int counter = 0; counter < contour.at (0).size (); counter ++)
        {
             CvPoint element = {contour.at (0).at (counter).x,  contour.at (0).at (counter).y};
             cvSeqPush (contourSeq, &element); 
        }

        int hullArray [convexHullPoints.at (0).size ()];

        for (int counter = 0; counter < convexHullPoints.size (); counter ++)
        {
             hullArray [counter] = convexHullPoints.at (0).at (counter);
        }

        for (int counter = 0; counter < convexHullPoints.size (); counter ++)
        {
             cvSeqPush (convexHullSeq, &(hullArray [counter]));
        }

        convexHullDefectsSeq = cvConvexityDefects (contourSeq, &convexHullSeq, cvConvexityDefectsStorage);

        CvConvexityDefect convexHullDefectsArray [convexHullDefectsSeq -> total];

        cvCvtSeqToArray (convexHullDefectsSeq, &convexHullDefectsArray, CV_WHOLE_SEQ);

        for (int counter = 0; counter < convexHullDefectsSeq -> total; counter ++)
        {
             CvPoint start = {convexHullDefectsArray [counter].start -> x, convexHullDefectsArray [counter].start -> y};
             CvPoint depthPoint = {convexHullDefectsArray [counter].depth_point -> x, convexHullDefectsArray [counter].depth_point -> y};
             CvPoint end = {convexHullDefectsArray [counter].end -> x, convexHullDefectsArray [counter].end -> y};

             vector <Point> convexityDefectVector;
             convexityDefectVector.push_back (start);
             convexityDefectVector.push_back (depthPoint);
             convexityDefectVector.push_back (end);

             convexHullDefects -> push_back (convexityDefectVector);
        }

        cvReleaseMemStorage (&contourSeqStorage);
        cvReleaseMemStorage (&convexHullSeqStorage);
        cvReleaseMemStorage (&convexHullDefectsSeqStorage);
        cvReleaseMemStorage (&cvConvexityDefectsStorage);
  }

1 Ответ

2 голосов
/ 24 ноября 2011

Вы должны взглянуть на этот другой пост на SO. Похоже, он уже решил эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...