opencv中图像缩放

 
注:代码摘自http://www.opencv.org.cn/index.php/%E5%9B%BE%E5%83%8F%E7%BC%A9%E6%94%BE
#include <cv.h>
#include <highgui.h>
#include <math.h>
 
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()函数就会缩放这个区域。实际图像的数据并没有破坏,只是在相应的数据内做了一些标记,可以使用相应的函数来解锁这个区域。

 

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值