资源简介
实现将2:1全景图(矩形球面投影equirectangular)划分成即将要进行的cubemap所需要的6个纹理面,附件代码只是一个简单的划分例子,仅供入门参考,集成开发环境是vs2010,可以直接打开运行看效果。如果想实现更为复杂的功能,则需要在此基础上修改完善。
代码片段和文件信息
#include
#include
#include
#include
#include //为了在一个窗口显示多幅图像而加的头文件
//#include “split.h“
using namespace cv;
using namespace std;
const float M_PI = 3.1415926;
// Define our six cube faces.
// 0 - 3 are side faces clockwise order
// 4 and 5 are top and bottom respectively
float faceTransform[6][2] =
{
{0 0}
{M_PI / 2 0}
{M_PI 0}
{-M_PI / 2 0}
{0 -M_PI / 2}
{0 M_PI / 2}
};
// Map a part of the equirectangular panorama (in) to a cube face
// (face). The ID of the face is given by faceId. The desired
// width and height are given by width and height.
inline void createCubeMapFace(const Mat &in Mat &face int faceId = 0 const int width = -1 const int height = -1)
{
float inWidth = in.cols;
float inHeight = in.rows;
// Allocate map
Mat mapx(width height CV_32F);//(in.size() CV_32F);董帆修改了width和height的位置
Mat mapy(width height CV_32F);//(in.size() CV_32F);
// Calculate adjacent (ak) and opposite (an) of the
// triangle that is spanned from the sphere center
//to our cube face.
const float an = sin(M_PI / 4);
const float ak = cos(M_PI / 4);
const float ftu = faceTransform[faceId][0];
const float ftv = faceTransform[faceId][1];
// For each point in the target image
// calculate the corresponding source coordinates.对目标图像的每个点计算相应的源坐标系
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
// Map face pixel coordinates to [-1 1] on plane
float nx = (float)y / (float)height - 0.5f;
float ny = (float)x / (float)width - 0.5f;
nx *= 2;
ny *= 2;
// Map [-1 1] plane coords to [-an an]
// thats the coordinates in respect to a unit sphere
// that contains our box.
nx *= an;
ny *= an;
float u v;
// Project from plane to sphere surface.
if(ftv == 0) {
// Center faces
u = atan2(nx ak);
v = atan2(ny * cos(u) ak);
u += ftu;
} else if(ftv > 0) {
// Bottom face
float d = sqrt(nx * nx + ny * ny);
v = M_PI / 2 - atan2(d ak);
u = atan2(ny nx);
} else {
// Top face
float d = sqrt(nx * nx + ny * ny);
v = -M_PI / 2 + atan2(d ak);
u = atan2(-ny nx);
}
// Map from angular coordinates to [-1 1] respectively.
u = u / (M_PI);
v = v / (M_PI / 2);
// Warp around if our coordinates are out of bounds.
while (v < -1) {
v += 2;
u += 1;
}
while (v > 1) {
v -= 2;
u += 1;
}
while(u < -1) {
u += 2;
}
while(u > 1) {
u -= 2;
}
// Map from [-1 1] to in texture space
u = u / 2.0f + 0.5f;
v = v / 2.0f + 0.5f;
u = u * (inWidth - 1);
v = v * (inHeight - 1);
// Save the result for this pixel in map
mapx.at(x y) = u;
mapy.at(x y) = v;
}
}
// Recreate output image if it has wrong size or type.
i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 87552 2016-11-18 15:26 OpencvTest00\Debug\OpencvTest.exe
文件 1031696 2016-11-18 15:26 OpencvTest00\Debug\OpencvTest.ilk
文件 1321984 2016-11-18 15:26 OpencvTest00\Debug\OpencvTest.pdb
文件 73793536 2016-11-18 15:25 OpencvTest00\ipch\opencvtest-1b3049e4\opencvtest-296a8017.ipch
文件 164249 2016-07-10 06:46 OpencvTest00\OpencvTest\bitmap360.jpg
文件 682 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\cl.command.1.tlog
文件 26462 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\CL.read.1.tlog
文件 372 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\CL.write.1.tlog
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 2126 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 4904 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 798 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\li
文件 406 2016-11-18 15:26 OpencvTest00\OpencvTest\Debug\mt.command.1.tlog
............此处省略34个文件信息
相关资源
- 用opencv实现全景图拼接
- 全景图拼接软件PTGui.Pro.v9.0,mac版本
- js全景图预览
- 全景图像拼接图像拼接作业
- 360度全景图片的平面映射鱼眼矫正-新
- 基于相位相关算法的全景图像拼接
- 基于SIFT特征的全景图像拼接(Qt)
- 100大产业链全景图-2019版.pdf
- Krpno VR720全景图片生成工具
- threejs 天空盒 50+
- 基于机器视觉的全景图像拼接
- 网页全景图
- 全景图像拼接技术研究现状综述
- Pano2vr 全景图皮肤
- 基于改进随机抽样一致算法的视频拼
- 360度全景图片预览效果js代码
- JS版3D360度全景展示图效果源码
- 18张全景图片素材,已还原成标准透视
- Unity3D里Cubemap 的6面贴图制作
- 全景图像拼接基于SIFT特征-Qt工程
- 基于opencv的图像拼接生成全景图C代码
评论
共有 条评论