C++ 显示黑色图像的几何扭曲

C++ 显示黑色图像的几何扭曲,c++,opencv,transformation,perspective,homography,C++,Opencv,Transformation,Perspective,Homography,我有一个关于几何扭曲的问题,基本上是在自顶向下的视角下扭曲图像。不使用点 我所拥有的: 我有一张45度角的图像,即F是我的相机指向下方的位置 写下我想做的事。第2页有主要公式 opencv::warpPerspective中用于激活此扭曲图像的主函数 假设我的数学是正确的,我有必要的Ccam1_cam2权限 我所做的: 我用论文中的公式生成了一个H矩阵。 如果没有平移,则测试仅旋转,即H=R,如果这会使扭曲图像看起来更好。 查看扭曲图像中的x,y值,注意它们是,因为您还没有显示生成H值的完整代

我有一个关于几何扭曲的问题,基本上是在自顶向下的视角下扭曲图像。不使用点

我所拥有的:

我有一张45度角的图像,即F是我的相机指向下方的位置

写下我想做的事。第2页有主要公式

opencv::warpPerspective中用于激活此扭曲图像的主函数 假设我的数学是正确的,我有必要的Ccam1_cam2权限 我所做的:

我用论文中的公式生成了一个H矩阵。 如果没有平移,则测试仅旋转,即H=R,如果这会使扭曲图像看起来更好。
查看扭曲图像中的x,y值,注意它们是,因为您还没有显示生成H值的完整代码-很难说清楚,但您可能缺少一个固有参数矩阵,也称为相机校准矩阵

你提供的论文中没有提到它,这意味着它们使用所谓的“标准化”或“未校准”单应性。当您从点对应密度生成单应时,您将获得“校准”单应并获得预期结果

考虑截面三维平面到平面方程。如您所见,R-t*n^t/d被矩阵Ka预乘,被Kb^-1后乘,转换第二个摄像机的固有矩阵,以产生“校准”单应性。如果两幅图像都是用同一台相机拍摄的,则可以假定Ka=Kb

因此,为了获得“校准”单应性,可以使用表达式Hc=K*H*K^-1,其中Hc是校准单应性,H是未校准单应性,K是校准矩阵

现在,您需要提取K。理想情况下,您应该执行相机校准以获得它,但如果您知道相机的焦距,则可以使用大致近似值,如下所示:

    | f, 0, cx |
K = | 0, f, cy |
    | 0, 0,  1 |
其中f是相机的焦距(以像素为单位),cx、cy是主点的坐标,可以使用w/2、h/2,其中w和h是图像的宽度和高度(以像素为单位)

 My generated H Matrix:
      0.240053 0.859119 -0.451983
      0.689905 -0.478534 -0.543171
      -0.682938 -0.181435 -0.707585

 pt generated H matrix
     0.894764 3.37653 77.6052
     -0.950235 2.02846 240.977
     -8.73899e-05 0.00384326 1
    | f, 0, cx |
K = | 0, f, cy |
    | 0, 0,  1 |