opencv改變影象大小cvResize和resize
阿新 • • 發佈:2019-02-07
在實現影象視窗展示的時候,經常出現影象過大或過小而無法有效的展示全圖,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操作。