1.cvResize()函数用来放大或缩小图像,该函数可以将源图像精确转换为目标图像的尺寸。
函数形式:void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
src:输入图像.
dst:输出图像.
interpolation:插值方法:
• CV_INTER_NN - 最近邻插值,
• CV_INTER_LINEAR - 线性插值 (默认)
• CV_INTER_AREA - 区域插值
• CV_INTER_CUBIC - 立方插值.
2.cvPyrDown()使用Gaussian金字塔分解对输入图像向下采样。
函数形式:void cvPyrDown(const CvArr*src,CvArr*dst,int filter=CV_GAUSSIAN_5x5);
src:输入图像。
dst:输出图像,其宽度和高度应是输入图像的一半。
filter :卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。
示例代码:
运行结果:
从运行结果可以看出cvPyrDown()处理过的图片比cvResize()处理过的图片更模糊一些。
另外,要注意使用这两个函数时,对图像尺寸的要求。
示例代码:
#include
#include
int main(int argc, char** argv)
{
IplImage* src = cvLoadImage("f:\\opencvEx\\fengjing3.jpg");
IplImage* resize1 = cvCreateImage(cvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
IplImage* resize2 = cvCreateImage(cvSize(resize1->width / 2, resize1->height / 2), resize1->depth, resize1->nChannels);
//IplImage* resize3 = cvCreateImage(cvSize(resize2->width / 2, resize2->height / 2), resize2->depth, resize2->nChannels);
IplImage* down1 = cvCreateImage(cvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
IplImage* down2 = cvCreateImage(cvSize(down1->width / 2, down1->height / 2), down1->depth, down1->nChannels);
//IplImage* down3 = cvCreateImage(cvSize(down2->width / 2, down2->height / 2), down2->depth, down2->nChannels);
//调用3次cvResize函数
cvResize(src, resize1);
cvResize(resize1, resize2);
//cvResize(resize2, resize3);
//调用3次cvPyrDown函数
cvPyrDown(src, down1);
cvPyrDown(down1, down2);
//cvPyrDown(down2, down3);
cvNamedWindow("src");
cvNamedWindow("resize one");
cvNamedWindow("resize two");
//cvNamedWindow("resize three");
cvNamedWindow("down one");
cvNamedWindow("down two");
//cvNamedWindow("down three");
cvShowImage("src", src);
cvShowImage("resize one", resize1);
cvShowImage("resize two", resize2);
//cvShowImage("resize three", resize3);
cvShowImage("down one", down1);
cvShowImage("down two", down2);
//cvShowImage("down three", down3);
//将生成的图片保存到f:\opencvEx\output文件夹下
char* filename1 = "F:\\opencvEx\\output\\origin.jpg";
char* filename2 = "F:\\opencvEx\\output\\resize1.jpg";
char* filename3 = "F:\\opencvEx\\output\\resize2.jpg";
//char* filename4 = "F:\\opencvEx\\output\\resize3.jpg";
char* filename5 = "F:\\opencvEx\\output\\down1.jpg";
char* filename6 = "F:\\opencvEx\\output\\down2.jpg";
//char* filename7 = "F:\\opencvEx\\output\\down3.jpg";
cvSaveImage(filename1, src);
cvSaveImage(filename2, resize1);
cvSaveImage(filename3, resize2);
//cvSaveImage(filename4, resize3);
cvSaveImage(filename5, down1);
cvSaveImage(filename6,down2);
//cvSaveImage(filename7, down3);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&resize1);
cvReleaseImage(&resize2);
//cvReleaseImage(&resize3);
cvReleaseImage(&down1);
cvReleaseImage(&down2);
//cvReleaseImage(&down3);
cvDestroyAllWindows();
return 0;
}
从运行结果可以看出cvPyrDown()处理过的图片比cvResize()处理过的图片更模糊一些。
另外,要注意使用这两个函数时,对图像尺寸的要求。