資源簡介
全景平面映射魚眼矯正 實現全景圖片、球面圖片的平面映射,使之看上去沒有變形。內附測試照片。半徑是源圖片寬度為周長的圓的半徑。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
評論
共有 條評論