我正在開發一個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