1. 程式人生 > >Java基於opencv—歸一化

Java基於opencv—歸一化

ram image eight 方向 都是 area lock turn 意思

Opencv中提供了resize函數,可以把圖像調整到相同大小

Java中resize函數的聲明,內部調用的都是native方法

public static void resize(Mat src, Mat dst, Size dsize, double fx, double fy, int interpolation)
    {
        
        resize_0(src.nativeObj, dst.nativeObj, dsize.width, dsize.height, fx, fy, interpolation);
        
        return;
    }

    //javadoc: resize(src, dst, dsize)
    public static void resize(Mat src, Mat dst, Size dsize)
    {
        
        resize_1(src.nativeObj, dst.nativeObj, dsize.width, dsize.height);
        
        return;
}

解釋下各個參數的意思:

src: 待改變大小的圖像

dst: 輸出的目標圖像

dsize: 目標圖像的尺寸

fx:width方向的縮放比例,如果它是0,那麽它就會按照
(double)dsize.width/src.cols來計算

fy:height方向的縮放比例,如果它是0,那麽它就會按照(double)dsize.height/src.rows來計算

interpolation:這個是指定插值的方式,圖像縮放之後,肯定像素要進行重新計算的,就靠這個參數來指定重新計算像素的方式,有以下幾種:
INTER_NEAREST - 最鄰近插值
INTER_LINEAR - 雙線性插值,如果最後一個參數你不指定,默認使用這種方法


INTER_AREA - 區域插值; 區域插值分為3種情況。圖像放大時類似於線性插值,圖像縮小時可以避免波紋出現。
INTER_CUBIC -基於4x4像素鄰域的3次插值法
INTER_LANCZOS4 - 8x8像素鄰域內的Lanczos插值

實戰演示一下

/**
     * 把圖片歸一化到相同的大小
     * 
     * @param src
     *            Mat矩陣對象
     * @return
     */
    public static Mat resize(Mat src) {
        //src = trimImg(src);//這個函數可以忽略,不產生影響
        Mat dst = new Mat();
        // 區域插值(INTER_AREA):圖像放大時類似於線性插值,圖像縮小時可以避免波紋出現。
        Imgproc.resize(src, dst, dsize, 0, 0, Imgproc.INTER_AREA);
        return dst;
    }

效果:
技術分享圖片

本項目的所有代碼地址:https://github.com/YLDarren/opencvHandleImg

Java基於opencv—歸一化