android 字体宽高比,关于深度学习:Android中Bitmap保持宽高比缩放

需要形容

深度学习模型在Android挪动端部署的时候,对于采集到的的摄像头画面须要放弃宽高比的将Bitmap缩放到模型输出的大小,缩放后较指标尺寸像素缺失的局部采纳灰度填充形式, 以避免指标产生显著形变影响辨认成果。在本例中,深度模型是以MobileNetV2为Backbone网络的YOLOv3,并基于MNN挪动端推理框架部署。其中模型输出图像的尺寸大小为(320,320)。

实现

public static Bitmap scaleImage(Bitmap bm, int newWidth, int newHeight)

{

if (bm == null) {

return null;

}

int width = bm.getWidth();

int height = bm.getHeight();

float scaleWidth = ((float) newWidth) / width;

float scaleHeight = ((float) newHeight) / height;

// 放弃宽高比缩放,以长边为主

float scaleRatio = Math.min(scaleHeight, scaleWidth);

Matrix matrix = new Matrix();

matrix.postScale(scaleRatio, scaleRatio);

Bitmap newBm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);

// 创立指标大小Bitmap

Bitmap scaledImage = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(scaledImage);

// 绘制背景色彩

Paint paint = new Paint();

paint.setColor(Color.GRAY);

paint.setStyle(Paint.Style.FILL);

canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);

// 确定画面地位

float left = 0;

float top = 0;

if (width > height){

top = (float)((newBm.getWidth() - newBm.getHeight()) / 2.0);

}

else{

left = (float)((newBm.getHeight() - newBm.getWidth()) / 2.0);

}

canvas.drawBitmap( newBm, left , top, null );

if (!bm.isRecycled()){

bm.recycle();

}

return scaledImage;

}

成果

摄像头捕捉到的原始画面Bitmap:

放弃宽高比缩放后的画面Bitmap:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值