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://www.jianshu.com/p/cababfb990bd