2012-03-11 187 views
0

我想有一個函數返回類似指針數組的指針,即指向CvSeq數組的第一個元素的指針。但是,我不知道是否可以創建一個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 & CvSeq ::運算符=(const的CvSeq &)

在此先感謝

回答

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) 
+0

感謝您的意見。對此,我真的非常感激。 – locorecto 2012-03-11 21:00:49