C++ 点投影和扭曲的二维图像不匹配[opencv]
我使用两种不同的方法渲染图像(作为opencv矩阵):C++ 点投影和扭曲的二维图像不匹配[opencv],c++,image,opencv,3d,C++,Image,Opencv,3d,我使用两种不同的方法渲染图像(作为opencv矩阵): 一个使用相机内部功能(焦距、主点;失真被禁用)的已实现投影功能-该功能在其他软件包中使用,并应正常工作() 2D到2D图像扭曲(在这里,我确定相机的角光线与2D图像的交点,应该扭曲到相机帧中);角点的反向投影使用与上述相同的摄影机模型 现在,我叠加这两幅图像,基本上应该是投影的笔尖(方法1)应该与扭曲图像上绘制的线对齐(方法2)。然而,这并没有发生 在两个方向上都有一个微小的移动,这取决于正在书写的笔的方向,当我移动相机的主点时,它会减小。
- 灰点:投影原点(应与白色区域的边缘对齐)
- 蓝色十字线:应该“写”波尔多色线的奔腾
- 灰线:笔近似
- 红色边缘:白色图像部分的“x轴”
- 绿色边缘:白色图像部分的“y轴”
我也对坐标系的原点做了同样的投影,在这里,不匹配越大,原点越远离图像的中心。(所以<代码> delta(经线,Project)< /代码>在图像边框上与中心比较大)请添加一些图像以澄清。用OpenCV(和针孔相机模型AFAIK)认为主点位于图像的中间,或者更好地说,原点在左上角,他们使用内部函数中的cx和cy将其移动到中心(如果cx和cy不同,那么您可能会从中心得到一些东西)。不匹配的一个可能来源是投影点的离散化。Ceil、round、FLOW/truncate是可能的方法,如果它们与两种解决方案不同,您将得到微小的差异。是的,我曾考虑过离散化错误,但它们会随着位置的不同而变得更大。我还想到了从Eigen到openCV的问题,因为列/行的顺序和计数方向,但我确保了这一点是正确的(当相机移动时,点移动方向相反,对应于它们的位置)。