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设置为零时,该函数将为您提供点的索引,而不是点本身

为了使这项工作,我认为您应该将最后一个参数替换为一个以获得积分。

于 2012-11-22T14:26:53.250 回答
2

我可以在第五行看到一个问题:

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

应该:

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