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