我正在开发一个opencv项目,并遵循不同的书籍和源代码。我发现书和一些源代码有区别。当使用已知的棋盘来校准照相机时,我们定义由棋盘角落制成的物体点。例如左上角是(0,0),下一个是(0,1)。但在书中,坐标系用作(y,x),而我在源代码中找到它的(x,y)如我在示例中给出的。右侧是+ x,下侧是+ y。opencv相机校准object_points方向
在本书中的代码:
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));
哪一个是正确的?
编辑:
我查了书的下一版本和作家将使用有关的部分相同的循环。
imho它取决于你想得到的三维坐标系。 – Micka
问题是一切都是一样的,但这部分。同样的功能不能给出不同的坐标系输出? @Micka – ssovukluk
你的意思是输入?您为目标点选择的坐标系可以是任意的。因此,您是否希望棋盘的长边是您的x或y或z轴,还是对角线或房间中的任何其他位置。 – Micka