2010-08-30 209 views
4

我正在使用OpenCV,一个新手到整个事情。摄像机校准

我有一个场景,我在墙上投影,我正在建造一种机器人,它有一个摄像头。我想知道如何处理图像,以便我可以获得相机跟踪的斑点坐标的实际值?

+0

您使用一台相机还是两台相机?所有的斑点都在墙上吗?斑点是否具有标准化的颜色和形状,或者它们是否可变? – rwong 2010-08-30 05:52:02

+0

嗨,我正在使用一台相机。斑点在墙上,但我得到了我的s/w中斑点的图像源。斑点总是黑色和圆形。 – user434623 2010-08-30 06:07:25

+0

如果你买得起,买XBox Kinect(145美元)。它会让你的生活变得更简单(即如果运动的结构不是你的目标)。 – Jacob 2011-07-16 14:13:55

回答

8

首先,你需要校准相机的内在。使用打印在纸板上的棋盘格图案来做到这一点,OpenCV有这方面的方法,虽然也有完成的工具。 为了得到一个想法,我写了一些python代码来从实时视频流中校准,沿相机以不同的角度和距离移动纸板。看看这里:http://svn.ioctl.eu/pub/opencv/py-camera_intrinsic/

然后你需要校准相机的外在,那就是相机的位置wrt。你的世界坐标。您可以在墙上放置一些标记,定义这些标记的3D位置,并让OpenCV为此校准外部(cvFindExtrinsicCameraParams2)。 在我的示例代码中,我计算了外在的wrt。棋盘,所以我可以在相机的正确角度渲染一个茶壶。你必须根据你的需要进行调整。

我假设你只投影到一个平面上。您必须知道几何才能获取检测到的斑点的三维坐标。然后,您可以在相机图像中找到斑点并了解内在,外在和几何,您可以根据内在/外在投影机为每个斑点投射光线,并计算每条这种光线与已知几何体的交点。然后交点就是你的3D投影点所在的世界空间的三维点。