一个C ++ convexityDefects包装器(OpenCV)?

时间:2011-11-23 22:15:38

标签: c++ image opencv vector

我正在尝试为OpenCV创建一个C ++包装器,但遗憾的是无法让它工作。我一次又一次地得到同样的错误:“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 个答案:

答案 0 :(得分:2)

您应该查看有关SO的this其他帖子。看来他已经解决了这个问题。