【问题标题】:Mobile Vision API new detector frame get Bitmap ImageMobile Vision API 新检测器框架获取位图图像
【发布时间】:2017-09-24 16:24:08
【问题描述】:

我知道之前有人问过类似的问题:- Mobile Vision API - concatenate new detector object to continue frame processing

我正在接收框架,但是当我调用 frame.getBitmap() 时,它返回一个空对象。 我想在https://github.com/tzutalin/dlib-android-app 中使用这个位图 (Android dlib 库)FaceDet 函数。

【问题讨论】:

  • 你有什么解决办法吗?

标签: android dlib


【解决方案1】:

根据 Mobile Vision API 文档,Frame 对象具有 getBitmap() 方法,但明确指出

getBitmap()
返回创建此帧时指定的位图,如果没有使用位图创建此帧,则返回 null。

如果你真的想得到 Bitmap 对象,你必须自己创建它。一种选择是在Frame 对象上使用getGrayscaleImageData() 方法。
如果返回的ByteBuffer中有字节,可以转换成Bitmap

首先,您必须使用来自getGrayscaleImageData() 结果的字节数组创建YuvImage。这是一个强制性步骤,因为字节数组在YUV/YCbCr 颜色空间中具有图像,以NV21 格式编码。所以第一行看起来像这样:

YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null);

widthheight 可以通过 getMedatada().getHeight() / getMedatada().getWidth() 方法从帧中提取。

然后你可以使用ByteArrayOutputStream快速压缩你的YuvImage对象。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream);

从那里您可以再次将其转换为字节数组,最终在BitmapFactory 中使用它。

byte[] jpegArray = byteArrayOutputStream.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);

我知道与简单的getBitmap() 方法使用相比,它的代码很多,但如果您在这种情况下确实需要位图,它会完成这项工作。

【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 2017-11-17
    • 2017-08-30
    • 2017-12-30
    • 2017-12-24
    • 1970-01-01
    • 2021-07-18
    • 2017-10-21
    相关资源
    最近更新 更多