【发布时间】:2017-09-05 19:39:38
【问题描述】:
我正在开发一个 opencv 项目并关注不同的来源,这些来源包括书籍和一些源代码。我发现书和一些源代码之间存在差异。当使用已知的棋盘校准相机时,我们定义了一个由棋盘角组成的对象点。例如左上角是(0,0),下一个是(0,1)。但是在书中,坐标系用作(y,x),而在源代码中我在互联网上找到了它的(x,y),正如我在示例中给出的那样。右边是+x,下边是+y。
书中的代码:
for (int i=0; i<boardSize.height; i++) {
for (int j=0; j<boardSize.width; j++) {
objectCorners.push_back(cv::Point3f(i, j, 0.0f));
}
}
摘自源代码:
for (int i = 0; i < board_height; i++)
for (int j = 0; j < board_width; j++)
obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0));
哪个是正确的?
编辑:
我检查了本书的下一个版本,作者在相关部分使用了相同的循环。
【问题讨论】:
-
恕我直言,这取决于您想要获得的 3D 坐标系。
-
问题是一切都一样,只是这一部分。相同的功能不能给出不同的坐标系输出? @米卡
-
你的意思是输入?您为对象点选择的坐标系可以是任意的。因此,您是否希望棋盘的较长边成为您的 x 轴或 y 轴或 z 轴或对角线或房间中的任何其他位置,都取决于您。
-
哦,你说当我改变 x 和 y 的位置时,输出也会反转?
-
是的,我的意思是输入。你能把你的评论作为答案。 @米卡
标签: c++ opencv camera-calibration