在實現(xiàn)圖像窗口展示的時候,經(jīng)常出現(xiàn)圖像過大或過小而無法有效的展示全圖,提供了()和()兩個函數(shù)進行相應(yīng)的縮放操作

默認圖片的坐標

1、:函數(shù)原形

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

其中 為修改、插補的方法,取值如下:

· - 最近-鄰居插補

· - 雙線性插值(默認方法)

· - 像素面積相關(guān)重采樣。當(dāng)縮小圖像時,該方法可以避免波紋的出現(xiàn)。當(dāng)放大圖像時,類似于方法。

· - 雙三次插值。

示例:

int main()
{
	IplImage *src = cvLoadImage("1.jpg");
	IplImage *dst;
	CvSize size;
	double scale = 0.5;     //縮放的倍數(shù)
	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、:函數(shù)原形

CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                          Size dsize, double fx=0, double fy=0,
                          int interpolation=INTER_LINEAR );

同理也是相應(yīng)的修改、插補的方法,有最近鄰、雙線性、雙三次、基于像素區(qū)域關(guān)系、蘭索斯插值種方法, 因為沒用到過, 我一般采用默認,原理不太清楚。

注:與(fx,fy)不能同時為0

示例:

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
}

常用于操作,常用于Mat操作。