我知道之前已经问过类似的问题: - Mobile Vision API - 连接新的探测器对象以继续帧处理
我正在接收帧但是当我调用frame.getBitmap()时它返回一个null对象.我想在https://github.com/tzutalin/dlib-android-app(Android dlib Library)FaceDet函数中使用此位图.
小智 1
根据 Mobile Vision API 文档,Frame对象有方法getBitmap(),但明确指出
getBitmap()
返回创建此帧时指定的位图,如果没有使用位图创建此帧,则返回 null。
如果您确实想获取 Bitmap 对象,则必须自己创建它。一种选择是通过对象getGrayscaleImageData()上的方法Frame。
如果返回的有一些字节ByteBuffer,您可以将其转换为Bitmap.
首先,您必须YuvImage使用结果中的字节数组进行创建getGrayscaleImageData()。这是强制性步骤,因为字节数组具有YUV / YCbCr颜色空间中的图像,以NV21格式编码。所以第一行看起来像这样:
YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null);
Run Code Online (Sandbox Code Playgroud)
width并且可以通过/方法height从框架中提取。getMedatada().getHeight()getMedatada().getWidth()
然后您可以使用它ByteArrayOutputStream来快速压缩您的YuvImage对象。
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream);
Run Code Online (Sandbox Code Playgroud)
从那里您可以再次将其转换为字节数组,最终在BitmapFactory.
byte[] jpegArray = byteArrayOutputStream.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
Run Code Online (Sandbox Code Playgroud)
我知道与简单的getBitmap()方法使用相比,它需要大量代码,但如果您在这种情况下确实需要位图,它就可以完成工作。
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |