opencv学习笔记(十三)利用cvResize函数调整图片尺寸

#include <opencv2/opencv.hpp>

int main(int argc,char **argv)  
{  
    IplImage *src = cvLoadImage("b.jpg");  
    IplImage *desc1;
    IplImage *desc2;
    CvSize sz;  
    double scale = 0.5;  
    if(src)  
    {  
        //显示原图
        cvNamedWindow("src",CV_WINDOW_AUTOSIZE);  
        cvShowImage("src",src); 
        //缩小2倍
        sz.width = src->width*scale;  
        sz.height = src->height*scale;  
        desc1 = cvCreateImage(sz,src->depth,src->nChannels);  
        cvResize(src,desc1,CV_INTER_AREA); 
        cvNamedWindow("out1",CV_WINDOW_AUTOSIZE);  
        cvShowImage("out1",desc1);  
        //缩小之后又扩大2倍
        sz.width = desc1->width*2.0;  
        sz.height = desc1->height*2.0;
       desc2 = cvCreateImage(sz,desc1 ->depth,desc1 ->nChannels);  
        cvResize(desc1,desc2,CV_INTER_CUBIC); 
        cvNamedWindow("out2",CV_WINDOW_AUTOSIZE);  
        cvShowImage("out2",desc2);  

        cvWaitKey(0);  

        cvReleaseImage(&src);
        cvReleaseImage(&desc1); 
        cvReleaseImage(&desc2); 
        cvDestroyAllWindows();  
    }  
    return 0;  
}  

cvResize()

void cvResize(
const CvArr* src,
CvArr* dst,
int interpolation=CV_INTER_LINEAR
);
最后一个参数指定插值方法,默认为线性插值法。可用的插值方法如下: CV_INTER_NN —— 最近邻插补
CV_INTER_LINEAR —— 线性插值(默认方法)
CV_INTER_AREA —— 区域插值
CV_INTER_CUBIC —— 三次样条插值

使用技巧:

若要缩小图像,一般情况下最好用CV_INTER_AREA来插值,
而若要放大图像,一般情况下最好用CV_INTER_CUBIC(效率不高,慢,不推荐使用)或CV_INTER_LINEAR(效率较高,速度较快,推荐使用)。

至于各个插值的效果,大家可以自己试一下——可以多次缩小多次放大之后再来看看效果。

你可能感兴趣的:(opencv)