void FiResize(const FiMat &src, FiMat &dst, double fx, double fy)
{
dst.Resize(src.rows*fx,src.cols*fy,src.nchannel);
int step1,step2,channels;
int kp,kq;
double kx,ky;
float scalex=fx;
float scaley=fy;
channels = src.channels();
step1= src.cols*channels;
step2= dst.cols*channels;
uchar* data1= (uchar*)src.data;
uchar* data2= (uchar*)dst.data;
for (int j = 0; j < dst.rows; j++)
{
for (int i = 0;i < dst.cols; i++)
{
kx=(double)(i+0.5)/scalex-0.5;
ky=(double)(j+0.5)/scaley-0.5;
kp = kx;
kq = ky;
double u,v;
u = kx -kp;
v = ky - kq;
kp = max(0,kp);
kp = min(kp,src.cols-2);
kq = max(0,kq);
kq = min(kq,src.rows-2);
for (int k =0;k<3;k++)
{
data2[j*step2+i*3+k] = (1-u)*(1-v)*data1[kq*step1+kp*3+k] + (1-u)*v*data1[(kq+1)*step1+kp*3+k] +
u*(1-v)*data1[kq*step1+(kp+1)*3+k] +u*v*data1[(kq+1)*step1+(kp+1)*3+k] ;
}
}
}
}
总结一下:
原来把
kp = max(0,kp);
kp = min(kp,src.cols-2);
kq = max(0,kq);
kq = min(kq,src.rows-2);
的src分别写成了dst调了半天多定位到这个函数才解决,粗心害死人啊!