资源简介
实现全景图片、球面图片的平面映射,使之看上去没有变形。内附测试照片。半径是源图片宽度为周长的圆的半径。opencv2.4,vs2010下运行毫无问题。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include “opencv2/stitching/stitcher.hpp“
#include
using namespace std;
using namespace cv;
float r=1304;
float change(int xint yfloat xDimfloat z)
{
float tt=(xDim-x)/z;
// float l=atan(xDim/z)-atan(tt);
float l=120*3.1415926/360-atan(tt);
float result=l*r;
return result;
}
float change1(int xint yfloat xDimfloat yDimfloat z)
{
float tt=(yDim-y)/(sqrt((xDim-x)*(xDim-x)+z*z));
float l=atan(tt);
float result=2048-l*r;
return result;
}
float change2(int xint yfloat xDimfloat yDimfloat z)
{
float tt1=(y-yDim)/(sqrt((xDim-x)*(xDim-x)+z*z));
// float tt2=752.00/(sqrt((752.00-x)*(752.00-x)+565504.0000));
float l=atan(tt1);
float result=l*r+2048;
return result;
}
int comeon(IplImage* srcImgvector& directions float angle int xDim int yDimvector& results)
{
Mat src(srcImg);
// int width=src.cols;
// int heigh=src.rows;
// RNG rng;
// vector result;
Mat img(xDim+1yDim+1CV_8UC3);
float z=xDim/(2*tan(angle*3.1415926/360));
TickMeter tm;
tm.start();
for(int i=0;i {
for (int y=0; y {
uchar* P1 = img.ptr(y);
uchar* P0 = src.ptr(y);
for (int x=0; x {
float c;
if(y<=(int)(yDim/2))
c=change1(xyxDim*1.0/2.0yDim*1.0/2.0z);
else
c=change2(xyxDim*1.0/2.0yDim*1.0/2.0z);
int d=(int)c;
P0 = src.ptr(c);
float a;
a=change(xyxDim*1.0/2.0z);
a=a+directions[i];
int b=(int)a;
float B=P0[3*b]*(1-a+b)+P0[3*(b+1)]*(a-b);
float G=P0[3*b+1]*(1-a+b)+P0[3*(b+1)+1]*(a-b);
float R=P0[3*b+2]*(1-a+b)+P0[3*(b+1)+2]*(a-b);
P0 = src.ptr(c+1);
float B1=P0[3*b]*(1-a+b)+P0[3*(b+1)]*(a-b);
float G1=P0[3*b+1]*(1-a+b)+P0[3*(b+1)+1]*(a-b);
float R1=P0[3*b+2]*(1-a+b)+P0[3*(b+1)+2]*(a-b);
B=B*(1-c+d)+B1*(c-d);
G=G*(1-c+d)+G1*(c-d);
R=R*(1-c+d)+R1*(c-d);
P1[3*x] = (uchar)B;
P1[3*x+1] = (uchar)G;
P1[3*x+2] = (uchar)R;
}
}
IplImage *res;
res =(_IplImage*) malloc(sizeof(_IplImage));
*res=IplImage(img);
IplImage* tempimg = (IplImage*)cvClone(res);
results.push_back(tempimg);
}
tm.stop();
cout<<“process time=“< return 1;
}
void main(int argc char** argv)
{
IplImage* srcImg = cvLoadImage(“1.jpg“ 1);
vector v1;
for(int i=0;i<8192;i=i+512)
v1.push_back((float)i);
vector results1;
IplImage *test;
comeon(srcImgv1130.014001200.0results1);
cvNamedWindow(“asdf“1);
for(int i = 0; i < (int)v1.size(); i++)
{
test = results1.at(i);
cvShowImage(“asdf“test);
cvWaitKey(0);
// cvSaveImage(“results1.jpg
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3024 2014-03-26 12:53 transformResults\transformResults\transformResults.cpp
文件 7910 2014-03-24 10:09 transformResults\transformResults\transformResults.vcxproj
文件 954 2014-03-24 10:09 transformResults\transformResults\transformResults.vcxproj.filters
文件 143 2014-03-24 10:05 transformResults\transformResults\transformResults.vcxproj.user
文件 856 2014-03-26 10:27 transformResults\transformResults\x64\Debug\cl.command.1.tlog
文件 20768 2014-03-26 10:27 transformResults\transformResults\x64\Debug\CL.read.1.tlog
文件 658 2014-03-26 10:27 transformResults\transformResults\x64\Debug\CL.write.1.tlog
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 2538 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 6142 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
文件 1106 2014-03-26 10:27 transformResults\transformResults\x64\Debug\li
............此处省略40个文件信息
- 上一篇:《代码阅读》光盘文件2
- 下一篇:几套完整的 热电偶 含源码 图纸
相关资源
- Three.js全景漫游代码实现
- cubemap实现将全景图分割为立方体6个面
- 用opencv实现全景图拼接
- Water_EnvironmentMapping
- F题最重磅资料:近15年全球海平面异
- SuperMap iClient for 3D平面场景二三维一体
- 梦龙投标软件三剑客投标书+网络计划
- 体验引擎++游戏设计全景探秘
- 全景图拼接软件PTGui.Pro.v9.0,mac版本
- js全景图预览
- 360全景通 旗舰版(无限制破解版)
- 全景图像拼接图像拼接作业
- rktools文件夹映射工具
- 360度全景图片的平面映射鱼眼矫正-新
- autoCAD办公家具平面图素材
- 基于相位相关算法的全景图像拼接
- 已经编译好的ngrok for window 和 for lin
- 虚拟现实大作业-校园全景漫游
- 720全景PTGui Pro v9.1.9 (32位、64位)
- 图像的球面投影工程和可执行程序
- 突破平面Illustrator CS5设计与制作深度
- 今日版式设计 超越平凡的平面设计
- 世界著名三角学经典著作钩沉 :平面三
- 360全景 720全景 VR 360度 720度 全景 漫游
- kinectV2.0深度图像与彩色图像的坐标映
- 浏览器中实现3D全景浏览
- 基于SIFT特征的全景图像拼接(Qt)
- 实现全景效果,线路规划并模拟运动
- Helios 1.3.1 录制全景视频 VR
- 100大产业链全景图-2019版.pdf
评论
共有 条评论