Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 点投影和扭曲的二维图像不匹配[opencv]_C++_Image_Opencv_3d - Fatal编程技术网

C++ 点投影和扭曲的二维图像不匹配[opencv]

C++ 点投影和扭曲的二维图像不匹配[opencv],c++,image,opencv,3d,C++,Image,Opencv,3d,我使用两种不同的方法渲染图像(作为opencv矩阵): 一个使用相机内部功能(焦距、主点;失真被禁用)的已实现投影功能-该功能在其他软件包中使用,并应正常工作() 2D到2D图像扭曲(在这里,我确定相机的角光线与2D图像的交点,应该扭曲到相机帧中);角点的反向投影使用与上述相同的摄影机模型 现在,我叠加这两幅图像,基本上应该是投影的笔尖(方法1)应该与扭曲图像上绘制的线对齐(方法2)。然而,这并没有发生 在两个方向上都有一个微小的移动,这取决于正在书写的笔的方向,当我移动相机的主点时,它会减小。

我使用两种不同的方法渲染图像(作为opencv矩阵):

  • 一个使用相机内部功能(焦距、主点;失真被禁用)的已实现投影功能-该功能在其他软件包中使用,并应正常工作()

  • 2D到2D图像扭曲(在这里,我确定相机的角光线与2D图像的交点,应该扭曲到相机帧中);角点的反向投影使用与上述相同的摄影机模型

  • 现在,我叠加这两幅图像,基本上应该是投影的笔尖(方法1)应该与扭曲图像上绘制的线对齐(方法2)。然而,这并没有发生

    在两个方向上都有一个微小的移动,这取决于正在书写的笔的方向,当我移动相机的主点时,它会减小。现在我的问题是,因为我没有考虑2D-2D图像扭曲的主要点,这可能是不匹配的原因吗?或者,由于图像扭曲是投影过程的简化,因此通常不可能将这两者对齐

    • 灰点:投影原点(应与白色区域的边缘对齐)

    • 蓝色十字线:应该“写”波尔多色线的奔腾

    • 灰线:笔近似

    • 红色边缘:白色图像部分的“x轴”

    • 绿色边缘:白色图像部分的“y轴”

    编辑:


    我也对坐标系的原点做了同样的投影,在这里,不匹配越大,原点越远离图像的中心。(所以<代码> delta(经线,Project)< /代码>在图像边框上与中心比较大)

    请添加一些图像以澄清。用OpenCV(和针孔相机模型AFAIK)认为主点位于图像的中间,或者更好地说,原点在左上角,他们使用内部函数中的cx和cy将其移动到中心(如果cx和cy不同,那么您可能会从中心得到一些东西)。不匹配的一个可能来源是投影点的离散化。Ceil、round、FLOW/truncate是可能的方法,如果它们与两种解决方案不同,您将得到微小的差异。是的,我曾考虑过离散化错误,但它们会随着位置的不同而变得更大。我还想到了从Eigen到openCV的问题,因为列/行的顺序和计数方向,但我确保了这一点是正确的(当相机移动时,点移动方向相反,对应于它们的位置)。