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

来源:互联网 发布:淘宝完美产品是真的吗 编辑:程序博客网 时间:2024/05/17 09:37
#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(效率较高,速度较快,推荐使用)。

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

0 0
原创粉丝点击