资源简介

利用双经度法对鱼眼相机拍摄的图片进行畸变矫正,在双经度法的基础上,使用扫描线法确定了鱼眼相片的半径和原先,并使椭圆变成了一个圆

资源截图

代码片段和文件信息

#include 
#include 
#include “ScanningMethod.h“
using namespace std;
using namespace cv;

#define Q_R 311
#define X0 392
#define Y0 282
#define PI 3.1415926

IplImage* Double(IplImage* img)
{
float R = Q_R;
IplImage* imgCalib = cvCreateImage(cvSize(2 * R 2 * R) IPL_DEPTH_8U 3);//创建校正后图像大小
float sita = 0;
float fi = 0;
float tempu = 0;
float tempv = 0;
float x0;//扩展边界后圆心发生偏移
float y0;
float r;
IplImage* imgCircle =ScanningMethod(img &x0 &y0 &r); //IplImage* imgCircle
float flag1 = 1;
float flag2 = 1;
CvPoint2D32f xy;
CvPoint2D32f uv;

for (int i = 0; i < imgCalib->width; i++)
{
for (int j = 0; j < imgCalib->height; j++)
{
sita = PI - (PI / 2 / R)*i;
fi = PI - (PI / 2 / R)*j;
tempu = tan(fi)*tan(fi) + 1 + (tan(fi)*tan(fi)) / (tan(sita)*tan(sita));
tempv = tan(sita)*tan(sita) + 1 + (tan(sita)*tan(sita)) / (tan(fi)*tan(fi));
if (fi >PI / 2)    //文中公式22,23 ,17,18有符号错误
flag1 = 1;
else
flag1 = -1;

if (sita  flag2 = 1;
else
flag2 = -1;
uv.x = flag1*R / sqrt(tempu) + x0;//u-fi 下正上负
uv.y = flag2*R / sqrt(tempv) + y0;//v-sita 右正左负

int iu = (int)uv.x;
int iv = (int)uv.y;
//!此处取的是左上点,为了双线性方便
CvPoint3D32f f1;
CvPoint3D32f f2;
if (iu >= 0 && iv >= 0 && iuwidth&&ivheight)
{
//双线性插值法
f1.x = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[iu * 3] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[(iu + 1) * 3] * (1 - abs(uv.x - (iu + 1)));

f1.y = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[iu * 3 + 1] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[(iu + 1) * 3 + 1] * (1 - abs(uv.x - (iu + 1)));

f1.z = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[iu * 3 + 2] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*iv))[(iu + 1) * 3 + 2] * (1 - abs(uv.x - (iu + 1)));

f2.x = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[iu * 3] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[(iu + 1) * 3] * (1 - abs(uv.x - (iu + 1)));

f2.y = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[iu * 3 + 1] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[(iu + 1) * 3 + 1] * (1 - abs(uv.x - (iu + 1)));

f2.z = ((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[iu * 3 + 2] * (1 - abs(uv.x - iu)) +
((uchar*)(imgCircle->imageData + imgCircle->widthStep*(iv + 1)))[(iu + 1) * 3 + 2] * (1 - abs(uv.x - (iu + 1)));

((uchar*)(imgCalib->imageData + imgCalib->widthStep*j))[i * 3] = f1.x*(1 - abs(uv.y - iv)) + f2.x*(abs(uv.y - iv));
((uchar*)(imgCalib->imageData + imgCalib->widthStep*j))[i * 3 + 1] = f1.y*(1 - abs(uv.y - iv)) + f2.y*(abs(uv.y - i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-09-04 11:46  继续改进双精度法_将椭圆改为圆\
     目录           0  2017-08-30 14:49  继续改进双精度法_将椭圆改为圆\.vs\
     目录           0  2017-08-30 14:49  继续改进双精度法_将椭圆改为圆\.vs\继续改进双精度法_将椭圆改为圆\
     目录           0  2017-08-30 14:49  继续改进双精度法_将椭圆改为圆\.vs\继续改进双精度法_将椭圆改为圆\v14\
     文件       32256  2017-09-04 11:46  继续改进双精度法_将椭圆改为圆\.vs\继续改进双精度法_将椭圆改为圆\v14\.suo
     目录           0  2017-08-30 14:50  继续改进双精度法_将椭圆改为圆\x64\
     目录           0  2017-08-30 14:50  继续改进双精度法_将椭圆改为圆\x64\Debug\
     文件      126464  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.exe
     文件     1429948  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.ilk
     文件     2928640  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.pdb
     目录           0  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\
     文件     2323884  2017-08-23 13:38  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\1.jpg
     文件     2904040  2017-09-01 14:10  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\123.jpg
     文件      107640  2017-08-23 16:16  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\3.jpg
     文件      576463  2017-08-14 19:17  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\4.jpg
     文件      940573  2017-09-01 14:13  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\5.jpg
     文件        5205  2017-08-30 14:54  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\ScanningMethod.cpp
     文件         683  2017-09-02 10:09  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\ScanningMethod.h
     文件        3735  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\main.cpp
     文件       81922  2017-09-04 11:28  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\result111s.jpg
     文件        9374  2017-08-30 10:29  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\test.jpg
     目录           0  2017-08-30 14:50  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\
     目录           0  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\
     文件       70213  2017-09-02 10:19  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\ScanningMethod.obj
     文件      388719  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\main.obj
     文件     1223680  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\vc140.idb
     文件     2183168  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\vc140.pdb
     文件        2565  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.log
     目录           0  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.tlog\
     文件        1298  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.tlog\CL.command.1.tlog
     文件       42126  2017-09-04 11:27  继续改进双精度法_将椭圆改为圆\继续改进双精度法_将椭圆改为圆\x64\Debug\继续改进双精度法_将椭圆改为圆.tlog\CL.read.1.tlog
............此处省略9个文件信息

评论

共有 条评论