【发布时间】:2015-02-05 21:40:39
【问题描述】:
我目前正在尝试使用 OpenCV 的校准工具箱,并且正在使用默认的棋盘格图案来校准相机。我想使用更大的棋盘格块,这样我就可以离相机更远,而不会影响 OpenCV 检测角落的能力。
据我了解,OpenCV 已使用默认块大小值进行预编程。我的问题是:有没有办法在代码中更改这个默认的块大小值?我会在哪里改变这个? TIA
【问题讨论】:
我目前正在尝试使用 OpenCV 的校准工具箱,并且正在使用默认的棋盘格图案来校准相机。我想使用更大的棋盘格块,这样我就可以离相机更远,而不会影响 OpenCV 检测角落的能力。
据我了解,OpenCV 已使用默认块大小值进行预编程。我的问题是:有没有办法在代码中更改这个默认的块大小值?我会在哪里改变这个? TIA
【问题讨论】:
OpenCV 不对您的图案的物理尺寸或图案尺寸做出任何假设。
也就是说,您可以使用任何具有 R 行和 C 列的模式。 每个块是 1 cm 还是 1 m 也没关系。
您为calibrateCamera 函数提供的唯一内容是objectPoints 和imagePoints。
这些参数的数组维度(大小)对应于图案的角数。
objectPoints 应包含棋盘角的 3D 坐标(好吧,在您的情况下为平面坐标,通过设置 Z=0)。这些角应缩放到棋盘的物理尺寸。也就是说,如果一个角具有行列索引(3,1),并且每个块边为 3 厘米,则 3D 坐标将为(0.09, 0.03, 0.00)。
【讨论】:
objp = np.zeros((6*7,3), np.float32) 和objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2) 行吗?它似乎创建了一个包含角索引而不是坐标的数组(例如(3, 1, 0)而不是(0.09, 0.03, 0))
meshgrid 函数创建,在这种情况下创建一个规则网格。在解释器中运行 meshgrid 命令并查看输出,希望它会很清楚。