1. 程式人生 > >OpenCV學習筆記_縮放圖片

OpenCV學習筆記_縮放圖片

#include <cv.h>
#include <highgui.h>

using namespace std;


IplImage* doPyrDown(IplImage* in, int filter = IPL_GAUSSIAN_5x5)
{
	//因為是執行縮放後的圖片的原圖的一半,所以原圖片的寬高最好都是2的倍數
	assert(in->width % 2 == 0 && in->height % 2 == 0);
	//執行縮放前,應先為縮放後的圖片建立空間,cvPyrDown函式不負責建立空間。如果原圖的寬高為2的倍數,則如下所示,否則在對應的地方+1。例如,當寬度不能被2整除時,在申請空間時,在寬度那填寫in->width / 2 + 1.注意,只能偏差只能是1.
	IplImage* out = cvCreateImage(cvSize(in->width / 2, in->height / 2), in->depth, in->nChannels);
	//在cvPyrDown函式裡有一句斷言std::abs(dsize.width*2 - ssize.width) <= 2 && std::abs(dsize.height*2 - ssize.height) <= 2
	cvPyrDown(in, out);
	return(out);
};

int main(int argc, char** argv)
{
	IplImage* img = cvLoadImage("d:\\DSCN0422.jpg");
	//如果cvShowImage第一個引數對應的視窗在之前沒有建立,則在執行這個函式的時候自動呼叫cvNamedWindow(第一個引數,CV_WINDOW_AUTOSIZE);
	cvShowImage("Example1", img);
	//縮放圖片
	IplImage* img2 = doPyrDown(img);
	cvShowImage("Example2", img2);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvReleaseImage(&img2);
	cvDestroyWindow("Example1");
	cvDestroyWindow("Example2");
}