使用opencv校准相机,它是如何工作的,以及如何移动棋盘

使用opencv校准相机,它是如何工作的,以及如何移动棋盘,opencv,camera-calibration,Opencv,Camera Calibration,我正在使用openCV的calibrateCamera功能来校准我的相机。我从教程开始,但似乎有点不对劲 相机俯视着一张桌子,我使用一个棋盘,棋盘的面积约占我总图像的1/2或1/4。因为我的目标是跟踪一个在这张桌子上滑动的平面对象,所以我也会在这张桌子上滑动我的棋盘 所以我的第一个问题是:我把棋盘移到这张桌子上可以吗?还是我必须做一些3D动作才能得到好的结果? 因为我想知道:这个函数如何猜测桌子和相机之间的距离?他对焦点只有一个猜测,而且他只有一只“眼睛”,所以没有深度视觉 我的第二个问题:这该

我正在使用openCV的calibrateCamera功能来校准我的相机。我从教程开始,但似乎有点不对劲

相机俯视着一张桌子,我使用一个棋盘,棋盘的面积约占我总图像的1/2或1/4。因为我的目标是跟踪一个在这张桌子上滑动的平面对象,所以我也会在这张桌子上滑动我的棋盘

所以我的第一个问题是:我把棋盘移到这张桌子上可以吗?还是我必须做一些3D动作才能得到好的结果? 因为我想知道:这个函数如何猜测桌子和相机之间的距离?他对焦点只有一个猜测,而且他只有一只“眼睛”,所以没有深度视觉

我的第二个问题:这该死的东西是怎么工作的有人能给我演示一下这个函数的一些实现吗


谢谢

摄像机校准需要一个点种子来计算摄像机矩阵和摄像机中心点的位置,以及畸变矩阵,如果你想使用棋盘,你必须考虑其尺寸(我从未使用圆函数,因为棋盘的检测更容易),棋盘的尺寸应该是对X不成对数,这样你就可以得到一个正确的旋转矩阵!校准功能需要最少8倍的棋盘转角(我使用30告诉50),这取决于您想要的精度。校准功能的返回值是重投影误差,如果校准良好,它应该接近零。 摄像机校准需要对使用过的棋盘大小(您可以使用不同的棋盘大小)和尺寸(以毫米、厘米甚至米等为单位)进行校准。您的结果将取决于给定的尺寸。 顺便说一下,在获得棋盘角点后,您必须使用函数
cornersubix
对其进行细化,您可以在函数参数中设置细化的程度

在互联网上你可以找到很多关于这个主题的文档


我希望有帮助

关于棋盘位置,我用25-30张图片得到了最好的结果 首先,我做了3-4张图片,显示棋盘在不同距离的全帧半1/3 1/4 然后,我确保转到每个角,每个边的每个中心加上每个轴XYZ上的4个旋转。当使用640x480传感器时,我的重投影误差大多在0.1左右,甚至更好

这里有几个链接让我找到了正确的方向:

我已经理解了该函数的工作原理,但我想知道它背后的计算。假设棋盘为7x7,每个方块的尺寸为2x2cm。该方法如何估计摄像机到棋盘的距离?因为如果棋盘远离凸轮,但凸轮有一个巨大的变焦镜头,图像将与普通镜头保持在附近的图像相同。我看到的唯一方法是得到一个更好的估计,是有一些图像是棋盘倾斜了一点。。。还是有什么我看不到的?有很多关于这个主题的文章。此外,stackoverflow中还提出了许多问题。如果你看一看O'Reilly的OpenCV书(或任何合适的书),你就会理解这个概念的工作原理。我听说,将棋盘放在与图像平面平行的平面上(摄像机直视棋盘)会导致校准错误。我也想知道这一点。OpenCV中解释了很多API,但不是实际应该做什么。