1

何かを完全に誤解しているに違いない。次のコードを使用して、四角形のコーナーポイントを見つけています

    maxCtr = cvApproxPoly( maxCtr, sizeof(CvContour), mem2, CV_POLY_APPROX_DP, 5, 1 );
    CvSeq* hull = cvConvexHull2( maxCtr, 0, CV_CLOCKWISE, 0 );
    int numOfHull =hull->total;
    CvPoint*  hullPoints;
    hullPoints = ( CvPoint *)malloc((hull->total)*sizeof(CvSeq));
    cvCvtSeqToArray(hull,hullPoints); 

cvDrawContours で確認したように、形状を正しく見つけることがうまく機能しています。しかし、hullPoints四隅の座標であると予想して見たところ、x と y の値は 83603736、83603744 のようにおかしいように見えます。これは正常ですか? もしそうなら、どうすれば画像の座標を取得できますか?

4

2 に答える 2

3

問題はconvexHull関数呼び出しにあります:

cvConvexHull2( maxCtr, 0, CV_CLOCKWISE, 0 )

最後のパラメーターreturn_pointsがzeroに設定されている場合、関数はポイント自体ではなく、ポイントのインデックスを提供します

これを機能させるには、最後のパラメーターをポイントを取得できるパラメーターに置き換えるだけでよいと思います。

于 2012-11-22T14:26:53.250 に答える
2

ここの 5 行目に問題があります。

hullPoints = ( CvPoint *)malloc((hull->total)*sizeof(CvSeq));

次のようにする必要があります。

hullPoints = ( CvPoint *)malloc((hull->total)*sizeof(CvPoint));
于 2012-04-18T00:48:44.490 に答える