Java基于opencv—归一化

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;
	}

效果:
Java基于opencv—归一化

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

原文地址:https://www.cnblogs.com/qjmnong/p/9650746.html