使用Point2f获得分段错误

时间:2014-02-02 10:26:26

标签: opencv

我使用以下代码

提取了图像的一些特征点
vector<Point2f> cornersFrame1;
goodFeaturesToTrack( frame1, cornersFrame1, maxCorners, qualityLevel, minDistance, Mat(), blockSize, useHarrisDetector, k );

之后我想读取这些特征点的当前值。所以,我使用以下代码:

for(int i=0; i<cornersFrame1.size(); i++)
{       
    float frame1 = calculatedU.at<float>( cornersFrame1[i].x, cornersFrame1[i].y     ); 
}

然后我得到了分段错误。

但是,如果我在“For loop”中使用以下代码,那么它可以工作。

    float frame1 = calculatedU.at<float>( cornersFrame1[i].y, cornersFrame1[i].x     ); 

我很困惑因为我认为“Point2f”将像素信息存储为(row,col)。不是吗?

1 个答案:

答案 0 :(得分:1)

不,不是。 OpenCV中的所有类型的点都是您可以考虑的正常点:(x,y)。在图像中进行坐标时,这意味着'x'是一列,'y'是一行。另一方面,&lt;&gt;需要作为输入(行,列)。这就是你必须提供(y,x)而不是(x,y)的原因。

为了防止将来混淆,使用at&lt;&gt;的方法之一就是这个:

float frame1 = calculatedU.at<float>( cornersFrame1[i] );

这样您就不需要考虑是否应该提供(x,y)或(y,x)。