返回指针数组(CvSeq指针)

时间:2012-03-11 20:36:44

标签: c++ c pointers opencv g++

我想要一个返回类似指针数组的函数,即一个指向CvSeq数组第一个元素的指针。但是,我不知道是否可以创建一个CvSeq数组。

这样做的目的是获得不同图像轮廓的CvSeq值。

以下是我的代码:

CvSeq* get_template_contours(string templ[], int SIZE){
IplImage *templ_img;
CvSeq *contour  = NULL;
CvSeq *contourPoly = new CvSeq[SIZE];
CvMemStorage* storage = cvCreateMemStorage(0);

for(int i = 0; i < SIZE; i++){
    templ_img = cvLoadImage(templ[i].c_str(), 0);

    cvFindContours(templ_img, storage, &contour, sizeof(CvContour),
        CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));

    contourPoly[i]=cvApproxPoly(contour, sizeof(CvContour), storage,CV_POLY_APPROX_DP,1,1);
}

cvReleaseImage(&templ_img);
cvClearMemStorage(storage);
cvClearSeq(contour);

return contourPoly;
}

但是我收到了这个错误

error: no match for ‘operator=’ in ‘*(contourPoly + ((long unsigned int)(((long unsigned int)i) * 96ul))) = cvApproxPoly(((const void*)contour), 128, storage, 0, 1.0e+0, 1)’

/usr/local/include/opencv2/core/types_c.h:1316:1:注意:候选人是:CvSeq&amp; CvSeq :: operator =(const CvSeq&amp;)

提前致谢

1 个答案:

答案 0 :(得分:1)

cvApproxPoly返回一个指向CvSeq结构的指针,并且您尝试将其存储在CvSeq数组中,而不是指向CvSeq的指针数组。我建议你使用CvSeq指针的向量:

#include <vector>

/* .... */

std::vector<CvSeq*> contourPoly(SIZE);

然后您将能够成功分配CvSeq指针:

contourPoly[i]=cvApproxPoly(contour, sizeof(CvContour), storage,CV_POLY_APPROX_DP,1,1);

请注意,该函数的签名现在应为:

std::vector<CvSeq*> get_template_contours(string templ[], int SIZE)