【发布时间】:2018-07-15 17:12:05
【问题描述】:
我正在使用 OpenCV 3.4 版本中提供的 calibration.cpp 示例进行相机校准。我正在使用一个简单的 9x6 棋盘,正方形长度 = 3.45 毫米。
运行代码的命令:
Calib.exe -w=9 -h=6 -s=3.45 -o=camera.yml -oe imgList.xml
我正在使用一批可用的 28 张图片here
camera.yml(输出)
drawChessboardCorners 的图像输出:here
有 4 张图像没有绘制棋盘覆盖,findChessboardCorners 对这些图像失败。
结果看起来有点奇怪(如果我理解正确的话)。我认为焦距值是理所当然的,但主要观点似乎在 c = (834, 1513) 处有所偏离。我期望在 (1280, 960) 处有一个更接近图像中心的点,因为相机与所观察表面的方向非常接近 90 度。
另外,如果我将一个对象放在主点并在 Z 轴上移动它,我不应该看到它在图像中沿 x 和 y 移动,这是正确的吗?
我怀疑我应该添加棋盘相对于相机具有更大倾斜度的图像以获得更好的结果(z 角)。但是相机的景深非常窄,这会阻止检测到棋盘角。
【问题讨论】:
-
真的是 (834,1513) vs. (1280,960) 还是 (1513,834) vs. (1280,960)?如果 thr first 是这种情况,也许您的校准图像坐标交换了 x 和 y 坐标?
-
一定是第一种情况。否则,相机矩阵没有多大意义。我也尝试了 -w=6 -h=9 并且相机矩阵看起来非常相似。 PS:编辑帖子添加calibration.cpp链接
标签: c++ opencv camera-calibration calibration