c – OpenCV Equirectangular旋转

由于我对投影和旋转矩阵的数学理解(几乎为零),我目前仍坚持使用OpenCV在360°图像上实现等角旋转.

这种旋转的结果正如你在这里看到的那样:https://www.youtube.com/watch?v=l1N0lEKIeLA

我在这里找到了一些代码https://github.com/FoxelSA/libgnomonic/wiki/Equirectangular-rotation_v0.1但我没有成功将它应用于opencv

如果有人知道如何将它应用于OpenCV Mat和Pitch,Yaw,Roll角度,我们将非常感激!

谢谢!

解决方法

而不是谈论偏航,俯仰和滚动,我将在这里谈论欧拉角x,y和z.

要执行equirectangular映射的旋转,可以按照以下过程操作:

>考虑结果图像中的坐标(i2,j2).我们将尝试找到放在这里的颜色.这些坐标对应于球体上的点,纬度为纬度lat2 = 180 * i2 / image.height和经度lon2 = 360 * j2 / image.width.计算相应的3D矢量v2.
>使用角度x,y和z计算旋转矩阵R(查看公式here).进行该矩阵的转置以获得从新图像到旧图像的反向旋转.我们将这个反向旋转矩阵Rt命名为.
>计算v1 = Rt * v2.然后计算v1的纬度lat1和经度lon1.
>在坐标i1 = image.height * lat1 / 180和j1 = image.width * lon1 / 360处查找原始图像中的颜色.这可能不是整数坐标.您可能需要在几个像素之间进行插值才能获得值.这是新图像中位置(i2,j2)处像素的颜色.

您需要了解如何在球体上的3D矢量与其纬度和经度角度之间进行转换,但这不应该太难找到.这里描述的算法应该是相当简单的实现.

如果我犯了任何错误,请告诉我,因为我自己没有测试过.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...