资源简介

实现全景图片、球面图片的平面映射,使之看上去没有变形。内附测试照片。半径是源图片宽度为周长的圆的半径。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\link.10504.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.10504.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11208.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11208.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11268.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11268.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11968.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.11968.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.12632.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.12632.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.13592.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.13592.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.15648.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.15648.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.16592.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.16592.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.16808.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.16808.write.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.18116.read.1.tlog

     文件          2  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.18116.write.1.tlog

     文件       2538  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.command.1.tlog

     文件       6142  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.read.1.tlog

     文件       1106  2014-03-26 10:27  transformResults\transformResults\x64\Debug\link.write.1.tlog

............此处省略40个文件信息

评论

共有 条评论