資源簡介
實現全景圖片、球面圖片的平面映射,使之看上去沒有變形。內附測試照片。半徑是源圖片寬度為周長的圓的半徑。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
- 下一篇:幾套完整的 熱電偶 含源碼 圖紙
評論
共有 條評論