縮放圖像是圖像處理中需要經常使用的操作。太小的圖像在圖像識別中不能很好的處理,需要將其放大,太大的圖像不方便儲存,需要將其縮小,下面記錄OpenCV圖片縮放方法。
縮放函數
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR ) 參數說明: src – 原圖像 dst – 輸出圖像 dsize – 輸出圖像大小,如果為0 則通過此公式計算得到:Size(round(fx*src.cols), round(fy*src.rows)),dsize和fx,fy不能全為空 fx – x方向縮放比例 fy – y方向縮放比例 interpolation – 插值方法: – INTER_NEAREST - a nearest-neighbor interpolation – INTER_LINEAR - a bilinear interpolation (used by default) – INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method. – INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood – INTER_LANCZOS4 - a Lanczos interpolation over 8x8 pixel neighborhood
使用示例(放大圖像)
下面代碼演示使用不同的縮放方法放大同一張圖片的結果。
int main( int argc, char** argv ) { Mat matSrc = imread("oripic.jpg",1); Mat matDst_INTER_NEAREST,matDst_INTER_LINEAR,matDst_INTER_AREA,matDst_INTER_CUBIC,matDst_INTER_LANCZOS4; //原圖使用不同的方法放大5倍后的結果 resize(matSrc,matDst_INTER_NEAREST,Size(0,0),5,5,INTER_NEAREST); resize(matSrc,matDst_INTER_LINEAR,Size(0,0),5,5,INTER_LINEAR); resize(matSrc,matDst_INTER_AREA,Size(0,0),5,5,INTER_AREA); resize(matSrc,matDst_INTER_CUBIC,Size(0,0),5,5,INTER_CUBIC); resize(matSrc,matDst_INTER_LANCZOS4,Size(0,0),5,5,INTER_LANCZOS4); namedWindow("OriPicture"); imshow("OriPicture",matSrc); namedWindow("INTER_NEAREST"); imshow("INTER_NEAREST",matDst_INTER_NEAREST); namedWindow("INTER_LINEAR"); imshow("INTER_LINEAR",matDst_INTER_LINEAR); namedWindow("INTER_AREA"); imshow("INTER_AREA",matDst_INTER_AREA); namedWindow("INTER_CUBIC"); imshow("INTER_CUBIC",matDst_INTER_CUBIC); namedWindow("INTER_LANCZOS4"); imshow("INTER_LANCZOS4",matDst_INTER_LANCZOS4); waitKey(0); }
放大結果:
使用示例(縮小圖像)
下面代碼將指定圖片縮小為當前的0.3
int main( int argc, char** argv ) { Mat matSrc = imread("oripic1.png",1); Mat matDst_INTER_NEAREST,matDst_INTER_LINEAR,matDst_INTER_AREA,matDst_INTER_CUBIC,matDst_INTER_LANCZOS4; //原圖使用不同的方法放大5倍后的結果 resize(matSrc,matDst_INTER_NEAREST,Size(0,0),0.3,0.3,INTER_NEAREST); resize(matSrc,matDst_INTER_LINEAR,Size(0,0),0.3,0.3,INTER_LINEAR); resize(matSrc,matDst_INTER_AREA,Size(0,0),0.3,0.3,INTER_AREA); resize(matSrc,matDst_INTER_CUBIC,Size(0,0),0.3,0.3,INTER_CUBIC); resize(matSrc,matDst_INTER_LANCZOS4,Size(0,0),0.3,0.3,INTER_LANCZOS4); namedWindow("OriPicture",WINDOW_AUTOSIZE); imshow("OriPicture",matSrc); namedWindow("INTER_NEAREST",WINDOW_AUTOSIZE); imshow("INTER_NEAREST",matDst_INTER_NEAREST); namedWindow("INTER_LINEAR"); imshow("INTER_LINEAR",matDst_INTER_LINEAR); namedWindow("INTER_AREA"); imshow("INTER_AREA",matDst_INTER_AREA); namedWindow("INTER_CUBIC"); imshow("INTER_CUBIC",matDst_INTER_CUBIC); namedWindow("INTER_LANCZOS4"); imshow("INTER_LANCZOS4",matDst_INTER_LANCZOS4); waitKey(0); }縮小效果(方法名沒有在圖像中顯示,可以自行運行代碼查看效果)


