您的位置:首页 > 运维架构

opencv改变图像大小cvResize和resize

2016-01-27 15:59 309 查看
在实现图像窗口展示的时候,经常出现图像过大或过小而无法有效的展示全图,opencv提供了cvResize()和resize()两个函数进行相应的缩放操作

默认图片的坐标



1、cvResize:函数原形

CVAPI(void)  cvResize( const CvArr* src, CvArr* dst,
                       int interpolation CV_DEFAULT( CV_INTER_LINEAR ));


其中interpolation 为修改、插补的方法,取值如下:

·CV_INTER_NN - 最近-邻居插补

·CV_INTER_LINEAR - 双线性插值(默认方法)

·CV_INTER_AREA - 像素面积相关重采样。当缩小图像时,该方法可以避免波纹的出现。当放大图像时,类似于方法CV_INTER_NN。

·CV_INTER_CUBIC - 双三次插值。

示例:

<pre name="code" class="cpp">int main()
{
	IplImage *src = cvLoadImage("1.jpg");
	IplImage *dst;
	CvSize size;
	double scale = 0.5;     //缩放的倍数
	size.width = src->width*scale;
	size.height = src->height*scale;
	dst = cvCreateImage(size, src->depth, src->nChannels);
	cvResize(src, dst, CV_INTER_CUBIC);
	cvNamedWindow("src", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("dst", CV_WINDOW_AUTOSIZE);
	cvShowImage("src", src);
	cvShowImage("dst", dst);
	cvWaitKey(0);
	cvReleaseImage(&src);
	cvReleaseImage(&dst);
	cvDestroyWindow("src");
	cvDestroyWindow("dst");
	return 0;
}






2、resize:函数原形

CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                          Size dsize, double fx=0, double fy=0,
                          int interpolation=INTER_LINEAR );
同理interpolation也是相应的修改、插补的方法,有最近邻、双线性、双三次、基于像素区域关系、兰索斯插值种方法,因为没用到过,我一般采用默认,原理不太清楚。

注:dsize与(fx,fy)不能同时为0

示例:

<pre name="code" class="cpp">int main()
{
	Mat img = imread("1.jpg",1);
	//缩放
	double scale = 0.5;
	Size dsize = Size(img.cols*scale, img.rows*scale);
	Mat img2 = Mat(dsize, CV_32S);
	resize(img, img2, dsize);
	imshow("img", img);
	imshow("img2", img2);
	waitKey(0);
	return 0;
	//或者来直接的
	//Mat img = imread("1.jpg", 1);
	//Mat img2;
	//resize(img,img2,Size(img.cols*scale,img.rows*scale));   //缩小为1/2
	//resize(img, img2, Size(20, 20));    //缩放到任意尺寸,20*20
}






cvResize常用于IplImage操作,resize常用于Mat操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: