如何将凸包点转换为图像中的实际坐标

时间:2012-04-17 21:39:52

标签: opencv

我必须完全误解一些事情。我使用以下代码来查找四边形的角点

    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。这是正常的吗?如果是这样,我怎样才能得到它们的图像坐标?

2 个答案:

答案 0 :(得分:3)

问题出在convexHull函数调用:

cvConvexHull2( maxCtr, 0, CV_CLOCKWISE, 0 )

当最后一个参数 return_points 设置为时,该函数将为您提供积分的索引,而不是积分本身

为了完成这项工作,我认为你应该用一个替换最后一个参数才能获得积分。

答案 1 :(得分:2)

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

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

应该是:

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