从OpenGL到OpenCV的转换 我所拥有的

从OpenGL到OpenCV的转换 我所拥有的,opencv,unity3d,opengl,perspectivecamera,Opencv,Unity3d,Opengl,Perspectivecamera,我在unity中使用标准透视相机生成图像。摄像机对准地平面(在unity中是xz平面),请参见图。因此,我需要删除透视图,以便所有裁剪行彼此平行 Methode openCV中的函数可用于从图像中删除透视图。所有信息都是已知的,如视野、旋转、位置等。。。因此我知道三维点如何映射到二维平面上,反之亦然。问题是OpenCV使用了其他系统。在openCV中,应为3X3矩阵,而unit的变换矩阵为4X4矩阵。两者之间有转换吗?或者我应该考虑另一种策略 编辑 我不能统一使用正交摄影机 固定的 通过从摄影机

我在unity中使用标准透视相机生成图像。摄像机对准地平面(在unity中是xz平面),请参见图。因此,我需要删除透视图,以便所有裁剪行彼此平行

Methode openCV中的函数可用于从图像中删除透视图。所有信息都是已知的,如视野、旋转、位置等。。。因此我知道三维点如何映射到二维平面上,反之亦然。问题是OpenCV使用了其他系统。在openCV中,应为3X3矩阵,而unit的变换矩阵为4X4矩阵。两者之间有转换吗?或者我应该考虑另一种策略

编辑 我不能统一使用正交摄影机

固定的 通过从摄影机原点通过每个像素构造光线并查找与地平面的交点,解决了此问题。在此之后,我以与原始图像相同的分辨率在网格中离散地平面。映射到同一单元格的点被累加


我认为在摄影机组件中,您只需将投影从透视更改为正交:


i,不能使用Unity的正形相机,我将尝试从Copen文档中的链接中从示例中模拟C++代码。另一种方法是,通过乘以逆矩阵(该点的变换矩阵的逆矩阵),尝试获取要删除投影的点的投影矩阵。矩阵乘以其逆矩阵即为恒等式,因此投影变换将被删除。我认为这应该是可能的,您可以深入了解,您可以获得/更改投影矩阵检查。关键是要撤消投影变换。然后你需要得到相应的投影矩阵,并应用它来获得你想要的位置。这应该和unity的正交摄影机做的一样


理解最低级别源的投影矩阵非常棒。

是的,这可能是一个选项,但这应该模拟真实世界,这样做会有点作弊。谢谢你的回答,它帮助了很多。最终的方法是从摄影机原点通过像素构造光线,然后找到与地平面的交点。由此,我以与原始图像相同的分辨率将地平面离散化