我想扩大在X,Y,Z米WRT相机的虚拟对象。 OpenCV的摄像头校准功能,但我不明白,我究竟是如何能以米为单位给出的坐标
我试图模拟一个团结摄像头,但没有得到预期的结果。
余设置投影矩阵如下,并创建在z = 2.415 + 0.5的单位立方体。 其中2.415是由于立方脸上的眼睛和投影平面(针孔摄像机模型)之间的距离在前剪裁平面,它的尺寸为单位它不应该覆盖整个视?
Matrix4x4 m = new Matrix4x4();
m[0, 0] = 1;
m[0, 1] = 0;
m[0, 2] = 0;
m[0, 3] = 0;
m[1, 0] = 0;
m[1, 1] = 1;
m[1, 2] = 0;
m[1, 3] = 0;
m[2, 0] = 0;
m[2, 1] = 0;
m[2, 2] = -0.01f;
m[2, 3] = 0;
m[3, 0] = 0;
m[3, 1] = 0;
m[3, 2] = -2.415f;
m[3, 3] = 0;
您的校准的全球规模(三维空间坐标的测量即单位)是由你使用校准物体的几何形状来确定。 例如,当你使用平棋盘的图像中的OpenCV校准,输入到所述校准程序被相应的3D的对(P,P)点P和3D的它们的图象P,该(X,Y,Z)坐标点以mm表示,厘米,英寸,英里,无论所要求的目标的大小使用(以及光学器件的图像的话),以及二维坐标的图像中的像素。 校准程序的输出是一组参数“转换”的三维坐标表示在这些韵律单位为像素(投影矩阵P的分量和非线性失真参数K)。
如果你不知道(或不想使用)校准目标的实际尺寸,你可以蒙混过关,但他们离开自己的比率不变(所以,例如,方形,不过仍是真正长的正方形其侧面的可能是未知的)。 在这种情况下,您的校准将被确定了一个未知的全球规模。 这实际上是常见的情况:在大多数虚拟现实应用中,你真的不关心全球范围是什么,只要结果的图像看起来是正确的。
例如,如果您要添加的安吉丽娜·朱莉的视频甚至puffier对3D的嘴唇,和复合它们与原始视频,这样全新的假嘴唇保持连接,并期待“自然”在她的脸上,你只需要重新调整假嘴唇的3D模型,使其正确重叠嘴唇的形象。 无论模型为1堆场或一英里中,你会使复合材料是完全不相干的CG照相机。
为了找到增广对象,你需要找到相机姿态和方向。 这是一样的发现摄像机外部参数。 您还可以先计算相机内部函数(被称为calibraiton)。
OpenCV的允许你做的这一切,但不是小事,它需要对自己的工作。 我给你一些提示,你首先需要认识到的东西,你知道它是如何看的情景,这样你就可以计算相机姿态通过分析该对象,调用它的标志。 您可以通过tipical基准开始,他们很容易被发现。
看看这个线程 。
我结束了手动测量的视场。 一旦你知道FOV,你可以轻松地创建投影矩阵。 没有必要担心单位,因为在端部的突出部的形式为(X * d / Z,Y * d / Z)的。 无论X,Y的单位,Z可以是X / Z的比率保持相同。