【问题标题】:Calibrate camera with opencv, how does it work and how do i have to move my chessboard用opencv校准相机,它是如何工作的,我该如何移动我的棋盘
【发布时间】:2014-01-09 11:57:55
【问题描述】:

我正在使用 openCV 的 calibrateCamera 函数来校准我的相机。我是从教程implementation开始的,但是好像有问题。

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

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

我的第二个问题:该死的东西是如何工作的? :p 谁能告诉我这个函数的一些实现?

谢谢!

【问题讨论】:

  • 我也很想知道这一点。 OpenCV 中解释了很多 API,但实际上不是你应该做的。

标签: opencv camera-calibration


【解决方案1】:

相机校准需要一个点种子来计算相机矩阵和相机中心点的位置,以及失真矩阵,如果你想使用棋盘,你必须考虑它的尺寸(I从来没有用过circles函数,因为棋盘的检测更容易),棋盘的维度应该是pair X unpair number,这样你就可以得到一个正确的旋转矩阵!校准函数需要最少 8 倍的 chessboardCorners 集并且(我使用 30 告诉 50)这取决于您想要的精确度。校准函数的返回值是重新投影误差,如果校准是,它应该接近于零好的。 cameraCalibration 采用使用过的棋盘的大小(您可以使用不同的 chessboardSize)和尺寸(以毫米或厘米甚至米等为单位),您的结果将取决于您给定的尺寸。 顺便说一句,在获得 chessboardCorners 后,您必须使用函数 CornerSubPix 对其进行细化,您可以在函数参数中设置细化的好坏。

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

http://www.ics.uci.edu/~majumder/vispercep/cameracalib.pdf

希望对你有帮助!

【讨论】:

  • 我已经了解了这个函数的工作原理,但是我想知道它背后的计算。假设棋盘是 7x7,每个方格的尺寸是 2x2cm。该方法如何估计相机到棋盘的距离?因为如果棋盘离凸轮很远,但凸轮有一个巨大的变焦镜头,那么图像将与使用普通镜头靠近它时的图像相同。我看到获得更好估计的唯一方法是在棋盘有点倾斜的情况下获得一些图像......或者还有其他我看不到的东西?
  • 关于这个主题的文章很多。此外,stackoverflow 中还提出了许多问题。如果你看看 O'Reily 的 OpenCV 书(或任何合适的书),你就会明白这个概念的工作原理。
【解决方案2】:

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

这里有一些链接让我朝着正确的方向前进: How to verify the correctness of calibration of a webcam?

【讨论】:

  • 我听说将棋盘放置在与图像平面平行的平面上(相机直视它)会导致校准错误。
猜你喜欢
  • 2019-07-29
  • 1970-01-01
  • 2016-09-15
  • 2013-02-24
  • 1970-01-01
  • 2013-03-03
  • 2014-10-03
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多