1

次のコードフラグメントがあります。

int count = (int)sizes.size();

CvSeq* seq = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint2D32f), memStorage);
float line[4];

for (int i=0;i<count;i++) {
    CvPoint2D32f p;
    p.x = sizes[i];
    p.y = depths[i];
    cvSeqPush(seq, &p);
}

cvFitLine( seq, CV_DIST_L1, 1, 0.001, 0.001, line );

しかし、このコードは例外をスローします: cvFitLine でサポートされていない形式または形式の組み合わせ (入力シーケンスは 2d ポイントまたは 3d ポイントで構成する必要があります) コードのどこに問題がありますか? (私はOpenCVの初心者です)

4

1 に答える 1

2

cvCreateSeq最初のパラメーターに関するドキュメントからの引用:

seqFlags – 作成されたシーケンスのフラグ。特定のタイプのシーケンスを処理する関数にシーケンスが渡されない場合、シーケンス値は 0 に設定されます。それ以外の場合は、定義済みのシーケンス タイプのリストから適切なタイプを選択する必要があります。

そして見てcvFitLine

points – 32 ビット整数または浮動小数点座標を持つ 2D または 3D ポイントのシーケンスまたは配列

したがって、シーケンスに追加するポイントのタイプを指定する必要があります。

CvSeq* seq = cvCreateSeq(CV_32FC2, sizeof(CvSeq), sizeof(CvPoint2D32f), memStorage);

トリックを行う必要があります。

于 2011-09-18T11:41:35.097 に答える