2012-03-11 21 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 ::演算子=(定数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