资源简介
全景平面映射鱼眼矫正 实现全景图片、球面图片的平面映射,使之看上去没有变形。内附测试照片。半径是源图片宽度为周长的圆的半径。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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-04 16:21 transform_opencv24_vs2010\
目录 0 2014-03-26 10:03 transform_opencv24_vs2010\ipch\
目录 0 2014-03-26 12:53 transform_opencv24_vs2010\ipch\transformresults-97c4c891\
文件 19456 2014-03-26 12:53 transform_opencv24_vs2010\transformResults.suo
目录 0 2018-05-04 16:21 transform_opencv24_vs2010\transform_opencv24\
文件 86528 2014-03-26 10:27 transform_opencv24_vs2010\transform_opencv24.exe
文件 15093760 2014-03-26 12:53 transform_opencv24_vs2010\transform_opencv24.sdf
文件 1269 2014-03-24 10:09 transform_opencv24_vs2010\transform_opencv24.sln
文件 15040528 2014-03-21 10:16 transform_opencv24_vs2010\transform_opencv24\111111.jpg
文件 3024 2014-03-26 12:53 transform_opencv24_vs2010\transform_opencv24\transform_opencv24.cpp
文件 954 2014-03-24 10:09 transform_opencv24_vs2010\transform_opencv24\transform_opencv24.filters
文件 143 2014-03-24 10:05 transform_opencv24_vs2010\transform_opencv24\transform_opencv24.user
文件 7910 2014-03-24 10:09 transform_opencv24_vs2010\transform_opencv24\transform_opencv24.vcxproj
相关资源
- OpenGL鱼眼镜头特效的视频播放器 基于
- 鱼眼畸变校正—改良版双经度法
- 基于opencv的鱼眼相机标定和透视投影
- 鱼眼标定校正 opencv3.0 视场大小可调
- opencv 鱼眼镜头标定校正
- 高精度激光点云三维显示,分析,处
- 鱼眼镜头光学
- 鱼眼摄像头标定与畸变校正双OPENCV版
- 高精度激光点云三维显示,分析,处
- 一种基于球面透视投影约束的鱼眼镜
- OCamCalib鱼眼标定程序对应的矫正程序
- NI License Activator 1.2
- 天津理工大学,操作系统实验报告*
- 鱼眼校正算法及实现
- 基于鱼眼矫正的原理
- 气候分析中检验突变程序(滑动t检验
- opencv3.0 鱼眼镜头标定校正代码
- OpenCV实现图片球面化
评论
共有 条评论