完成OpenCV图像缩放

感觉上opencv很强大,但是,用起来又有点茫然,一点一点对她的内部机制了解吧。
下面是今天的研究成果:
由于标准话人脸模板要缩放图像到统一的尺寸,奇怪的是 CV里面居然没有提供这样的函数~~~哎

1:
// :双线性插值缩放图像
// :  输入参数
// :       image:输入图像(8bit,单通道)
// :       rows:缩放后的行数,
// :       cols:缩放后的列数
// :  返回
// :       缩放后的图像
IplImage* ZoomBilinear( IplImage* image, int rows, int cols )
{
int depth = 8, channels = 1;
IplImage* pImg = cvCreateImage( cvSize(cols,rows), depth, channels );
float scaleFactorRow = ((float)rows)/image->height;
float scaleFactorCol = ((float)cols)/image->width;
int i_out, j_out, i_in, j_in;
float i_in_f, j_in_f;
float u , v ;
float pixel;

u = v = 0.0;

for( i_out=0; i_out{
   for( j_out=0; j_out   {
    i_in_f = ((float)i_out) / scaleFactorRow;
    j_in_f = ((float)j_out) / scaleFactorCol;
    u = i_in_f - cvFloor( i_in_f );
    v = j_in_f - cvFloor( j_in_f );
    i_in = cvFloor( i_in_f );
    j_in = cvFloor( j_in_f );

    // :对边界值暂不做处理
    if ( image->height==i_in || image->width==j_in ||
     0==i_in || 0==j_in )
     continue;

    pixel =
     (1-u)*(1-v)*CV_IMAGE_ELEM(image,uchar,i_in,j_in) +
     (1-u)*v*CV_IMAGE_ELEM(image,uchar,i_in,j_in+1) +
     u*(1-v)*CV_IMAGE_ELEM(image,uchar,i_in+1,j_in) +
     u*v*CV_IMAGE_ELEM(image,uchar,i_in+1,j_in+1);
   
    CV_IMAGE_ELEM(pImg, uchar, i_out, j_out ) = cvFloor( pixel );

   }
}

return pImg;
}

你可能感兴趣的:(opencv)