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
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦