opencv改變圖像大小cvResize和resize
在實(shí)現(xiàn)圖像窗口展示的時(shí)候,經(jīng)常出現(xiàn)圖像過(guò)大或過(guò)小而無(wú)法有效的展示全圖,提供了()和()兩個(gè)函數(shù)進(jìn)行相應(yīng)的縮放操作
默認(rèn)圖片的坐標(biāo)
1、:函數(shù)原形
CVAPI(void) cvResize( const CvArr* src, CvArr* dst,
int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
其中 為修改、插補(bǔ)的方法,取值如下:
· - 最近-鄰居插補(bǔ)
· - 雙線性插值(默認(rèn)方法)
· - 像素面積相關(guān)重采樣。當(dāng)縮小圖像時(shí),該方法可以避免波紋的出現(xiàn)。當(dāng)放大圖像時(shí),類(lèi)似于方法。
· - 雙三次插值。
示例:
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)的修改、插補(bǔ)的方法,有最近鄰、雙線性、雙三次、基于像素區(qū)域關(guān)系、蘭索斯插值種方法, 因?yàn)闆](méi)用到過(guò), 我一般采用默認(rèn),原理不太清楚。
注:與(fx,fy)不能同時(shí)為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;
//或者來(lái)直接的
//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操作。
聲明:本站所有文章資源內(nèi)容,如無(wú)特殊說(shuō)明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。