Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++ 具有点到点映射的等矩形到立方体?_C++_Image_Opencv_Projection_Panoramas - Fatal编程技术网

C++ 具有点到点映射的等矩形到立方体?

C++ 具有点到点映射的等矩形到立方体?,c++,image,opencv,projection,panoramas,C++,Image,Opencv,Projection,Panoramas,我需要将等矩形投影中的全景图转换为6个立方体面,然后再转换为球形投影并返回,但是我需要跟踪每个点在每个投影中的映射方式,如 等矩形点(x,y)三次面点(x,y)球面点(x,y,z) 如何在C++和OpenCV?中实现这一点? 这些变换是必需的,因为当投影在球体上的两个全景并排放置时,我需要通过比较关键点之间的角度来找出两个这样的图像之间的良好匹配关键点 这是全景图:已解决,下面是将二维全景坐标转换为三维球坐标的函数 vector<int> getSphericalPoint3D(in

我需要将等矩形投影中的全景图转换为6个立方体面,然后再转换为球形投影并返回,但是我需要跟踪每个点在每个投影中的映射方式,如

等矩形点(x,y)三次面点(x,y)球面点(x,y,z)

如何在C++和OpenCV?

中实现这一点? 这些变换是必需的,因为当投影在球体上的两个全景并排放置时,我需要通过比较关键点之间的角度来找出两个这样的图像之间的良好匹配关键点


这是全景图:

已解决,下面是将二维全景坐标转换为三维球坐标的函数

vector<int> getSphericalPoint3D(int x, int y, int cols, int rows)
{
    //introduce a radius to 
    static const int radius = 128;
    vector<int> point3D;
    // the center 
    double c_x = (double)cols / 2;
    double c_y = (double)rows / 2;

    double X = (((double)x - c_x) * CV_PI) / c_x;
    double Y = (((double)y - c_y) * CV_PI) / c_y;

    int x3D = round(radius * cos(X) * cos(Y)) + radius;
    int y3D = round(radius * cos(X) * sin(Y)) + radius;
    int z3D = round(radius * sin(X)) + radius;

    point3D = { x3D, y3D, z3D };
    return point3D;
}
vector GetSphereCalPoint3D(int x、int y、int cols、int行)
{
//引入半径
静态常数int半径=128;
向量点3d;
//中心
双c_x=(双)cols/2;
双c_y=(双)行/2;
双X=((双)X-c_X)*CV_PI)/c_X;
双Y=((双)Y-c_Y)*CV_PI)/c_Y;
int x3D=圆形(半径*cos(X)*cos(Y))+半径;
int y3D=圆形(半径*cos(X)*sin(Y))+半径;
int z3D=圆形(半径*sin(X))+半径;
点3d={x3D,y3D,z3D};
返回点3d;
}
  • 其思想是将X轴和Y轴上的2d像素从-Pi归一化为Pi
  • 使用以下关系获得球面坐标
  • x=R*cos(x)cos(y)+R(添加此R以避免负值)

    y=R*cos(x)sin(y)+R

    z=R*sin(x)+R

    类似的变换用于三次变换