zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    23种设计模式
    云计算管理三利器:Nagios、Ganglia和Splunk
    Hadoop 管理监控工具:Apache Ambari
    淘宝数据产品技术架构
    淘宝数据分析工具汇总
    Linux(CENTOS7) RabbitMq安装
    Linux(CENTOS7) Tomcat服务成功发布但局域网浏览器无法访问
    Linux(CENTOS7) Nginx安装
    Linux(CENTOS7) Jdk完整步骤安装
    Oracle存储过程案例集合
  • 原文地址:https://www.cnblogs.com/qjmnong/p/9650746.html
Copyright © 2011-2022 走看看