• 大小: 18.9MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-08
  • 语言: 其他
  • 标签: 鱼眼  ,处理  ,CV  

资源简介

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

评论

共有 条评论