资源简介
使用c++,通过一次二次三次插值和函数映射,实现图像的扭曲,球面化,TPS变形。

代码片段和文件信息
#include “cv.h“
#include “highgui.h“
using namespace cv; //下面的所有cv相关类型不用加上前缀了
#include
#include
#include
using namespace std;
#include
#define pi 3.1415926
#define x_center 207
#define y_center 207
/*void sphere( Mat &img)
{
int ij=0i1=0j1=0;
int i0=img.cols/2;
int j0=img.rows/2;
for(i=1;i1 for( j=0;j1 //int i1=0j1=0;
i1 = cos(atan(j/i)) * sin((π*sqrt(i*i +j*j)) / (2*R)) * R;
j1 = sin(atan(j/i)) * sin((π*sqrt(i*i +j*j)) / (2*R)) * R;
img.at(j1+j0i1+i0)[0]=img.at(ij)[0];
img.at(j1+j0i1+i0)[1]=img.at(ij)[1];
img.at(j1+j0i1+i0)[2]=img.at(ij)[2];
img.at(-j1+j0i1+i0)[0]=img.at(ij)[0];
img.at(-j1+j0i1+i0)[1]=img.at(ij)[1];
img.at(-j1+j0i1+i0)[2]=img.at(ij)[2];
img.at(j1+j0-i1+i0)[0]=img.at(ij)[0];
img.at(j1+j0-i1+i0)[1]=img.at(ij)[1];
img.at(j1+j0-i1+i0)[2]=img.at(ij)[2];
img.at(-j1+j0-i1+i0)[0]=img.at(ij)[0];
img.at(-j1+j0-i1+i0)[1]=img.at(ij)[1];
img.at(-j1+j0-i1+i0)[2]=img.at(ij)[2];
}
j1=0;
}
};*/
void near(double xxdouble yyint xint yMat imgMat& img1){
int x1=int (xx);
double u=xx-double(x1);
if(u>=0.5) x1+=1;
int y1=int (yy);
double v=yy-double(y1);
if(v>=0.5) y1=y1+1;
img1.at(xy)[0]=img.at(x1y1)[0];
img1.at(xy)[1]=img.at(x1y1)[1];
img1.at(xy)[2]=img.at(x1y1)[2];
}
void bilinear(double xxdouble yyint xint yMat imgMat& img1){
int x1=int (xx);
double u=xx-double(x1);
int y1=int (yy);
double v=yy-double(y1);
img1.at(xy)[0]=(1-u)*(1-v)*img.at(x1y1)[0]+(1-v)*u*img.at(x1+1y1)[0]+(1-u)*v*img.at(x1y1+1)[0]+u*v*img.at(x1+1y1+1)[0];
img1.at(xy)[1]=(1-u)*(1-v)*img.at(x1y1)[1]+(1-v)*u*img.at(x1+1y1)[1]+(1-u)*v*img.at(x1y1+1)[1]+u*v*img.at(x1+1y1+1)[1];
img1.at(xy)[2]=(1-u)*(1-v)*img.at(x1y1)[2]+(1-v)*u*img.at(x1+1y1)[2]+(1-u)*v*img.at(x1y1+1)[2]+u*v*img.at(x1+1y1+1)[2];
}
double S(double x){
double Sx;
x=fabs(x);
if(x<1)
Sx=1-2*x*x+x*x*x;
else if(x<2)
Sx=4-8*x+5*x*x-x*x*x;
else
Sx=0;
return Sx;
}
void bicubic(double xxdouble yyint xint yMat imgMat& img1){
int x1=int (xx);
double u=xx-double(x1);
int y1=int (yy);
double v=yy-double(y1);
double e;
double temp1=S(1+u)*img.at(x1-1y1-1)[0]+S(u)*img.at(x1y1-1)[0]+S(u-1)*img.at(x1+1y1-1)[0]+S(u-2)*img.at(x1+2y1-1)[0];
double temp2=S(1+u)*img.at(x1-1y1)[0]+S(u)*img.at(x1y1)[0]+S(u-1)*img.at(x1+1y1)[0]+S(u-2)*img.at(x1+2y1)[0];
double temp3=S(1+u)*img.at(x1-1y1+1)[0]+S(u)*img.at(x1y1+1)[0]+S(u-1)*img.at(x1+1y1+1)[0]+S(u-2)*i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10555 2014-11-21 11:10 011935171448086.jpg
文件 489218 2014-11-21 10:27 example.png
目录 0 2014-11-23 23:55 image\
目录 0 2014-11-23 21:53 image\Debug\
文件 102400 2014-11-23 22:05 image\Debug\image.exe
文件 731068 2014-11-23 22:05 image\Debug\image.ilk
文件 2190336 2014-11-23 22:05 image\Debug\image.pdb
目录 0 2014-11-20 11:58 image\image\
文件 3061 2014-11-21 10:29 image\image.psess
文件 18546688 2014-11-23 23:55 image\image.sdf
文件 977 2014-11-21 10:29 image\image.sln
文件 43008 2014-11-23 23:55 image\image.v11.suo
目录 0 2014-11-23 22:05 image\image\Debug\
文件 482 2014-11-23 22:05 image\image\Debug\cl.command.1.tlog
文件 13572 2014-11-23 22:05 image\image\Debug\CL.read.1.tlog
文件 192 2014-11-23 22:05 image\image\Debug\CL.write.1.tlog
文件 48 2014-11-23 22:05 image\image\Debug\image.lastbuildstate
文件 2524 2014-11-23 22:05 image\image\Debug\image.log
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
文件 2 2014-11-23 22:05 image\image\Debug\li
............此处省略130个文件信息
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 用C语言进行数字图像处理
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 基于esp32的摄像头采集图像代码
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- basler相机图像采集和显示
评论
共有 条评论