Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1612448
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类:

2010-06-22 23:27:38

 
注:代码摘自
#include 
#include 
#include 
 
int main(int argc, char* argv[])
{
    IplImage *src = 0;			//源图像指针
    IplImage *dst = 0;			//目标图像指针
    float scale = 0.618;		//缩放倍数为0.618倍
    CvSize dst_cvsize;			//目标图像尺寸
 
    /* the first command line parameter must be image file name */
    if ( argc == 2 && (src = cvLoadImage(argv[1], -1))!=0 )
    {
        //如果命令行传递了需要打开的图片就无须退出,所以注释掉下面一行!
	//return -1;
    }
    else
    {
        src = cvLoadImage("tiger.jpg");    //载入工作目录下文件名为“tiger.jpg”的图片。
    }
 
    dst_cvsize.width = src->width * scale;		//目标图像的宽为源图象宽的scale倍
    dst_cvsize.height = src->height * scale;	//目标图像的高为源图象高的scale倍
 
    dst = cvCreateImage( dst_cvsize, src->depth, src->nChannels);	//构造目标图象
    cvResize(src, dst, CV_INTER_LINEAR);	//缩放源图像到目标图像
 
    cvNamedWindow( "src",   CV_WINDOW_AUTOSIZE );	//创建用于显示源图像的窗口
    cvNamedWindow( "dst",   CV_WINDOW_AUTOSIZE );	//创建用于显示目标图像的窗口
 
    cvShowImage( "src", src );		//显示源图像
    cvShowImage( "dst", dst );		//显示目标图像
 
    cvWaitKey(-1);		//等待用户响应
 
    cvReleaseImage(&src);	//释放源图像占用的内存
    cvReleaseImage(&dst);	//释放目标图像占用的内存
    cvDestroyWindow( "src" );	//销毁窗口“src”
    cvDestroyWindow( "dst" );	//销毁窗口“dst”
    //void cvDestroyAllWindows(void);
 
    return 0;
}
具体步骤如下:
  1. 申请目标图像空间,空间大小制定为预期大小。
  2. 选择填充方式
  3. cvresize()函数,就这么简单。
看函数原型: 

cvResize
Resizes an image.
void cvResize(
const CvArr* src,
CvArr* dst,
int interpolation=CV INTER LINEAR );

/*
src Source image
dst Destination image
interpolation Interpolation method:
CV INTER NN nearest-neigbor interpolation
CV INTER LINEAR bilinear interpolation (used by default)
CV INTER AREA resampling using pixel area relation. It is the preferred method for image
decimation that gives moire-free results. In terms of zooming it is similar to the
CV INTER NN method
CV INTER CUBIC bicubic interpolation
The function cvResize resizes an image src so that it fits exactly into dst. If ROI is set, the
function considers the ROI as supported. */


其他没有什么可说的了,需要注意这句话:If ROI is set, the function considers the ROI as supported,

如果设置了ROI区域,可以使用void cvSetImageROI(IplImage* image,CvRect rect);

函数来设置这个区域,那么cvResize()函数就会缩放这个区域。实际图像的数据并没有破坏,只是在相应的数据内做了一些标记,可以使用相应的函数来解锁这个区域。

 

阅读(9525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~