Open CV縮放圖像


縮放圖像是圖像處理中需要經常使用的操作。太小的圖像在圖像識別中不能很好的處理,需要將其放大,太大的圖像不方便儲存,需要將其縮小,下面記錄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);
}

放大結果:

image

使用示例(縮小圖像)

下面代碼將指定圖片縮小為當前的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);
}

縮小效果(方法名沒有在圖像中顯示,可以自行運行代碼查看效果)

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM