• 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

  • 相关阅读:
    建立十字链表
    KMP算法
    魔术师发牌问题(循环链表)
    约瑟夫问题(循环链表)
    中缀表达式 转 (逆)波兰表达式
    中缀表达式求值
    迷宫问题(回溯法)
    范数
    AUC
    概率论
  • 原文地址:https://www.cnblogs.com/qjmnong/p/9650746.html
Copyright © 2020-2023  润新知