我使用以下代码提取了图像的一些特征点vector<Point2f> cornersFrame1;goodFeaturesToTrack( frame1, cornersFrame1, maxCorners, qualityLevel, minDistance, Mat(), blockSize, useHarrisDetector, k );之后,我想读取这些特征点上的present值。因此,我正在使用以下代码:for(int i=0; i<cornersFrame1.size(); i++){ float frame1 = calculatedU.at<float>( cornersFrame1[i].x, cornersFrame1[i].y );}然后我得到细分错误。但是,如果我在“For循环”中使用以下代码,则它可以工作。 float frame1 = calculatedU.at<float>( cornersFrame1[i].y, cornersFrame1[i].x ); 我很困惑,因为我认为“Point2f”将像素信息存储为(row,col)。是不是 最佳答案 不它不是。 OpenCV中的所有类型的点都是您可以考虑的普通点:(x,y)。当涉及到图像中的坐标时,这意味着“x”是一列,“y”是一行。另一方面,at 需要作为输入(行,列)。这就是为什么您必须提供(y,x)而不是(x,y)的原因。为了防止将来出现混乱,使用at 的一种方法是:float frame1 = calculatedU.at<float>( cornersFrame1[i] );这样,您无需考虑应该提供(x,y)还是(y,x)。关于opencv - 使用Point2f获取段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21509462/
10-12 19:44