我正在使用 startImageStream 逐帧获取,但我想避免使用 C++ 代码(使用 ffi)将 YUV420 转换为 RGB,这会增加大量开销。因此我在实例化控制器时使用了 imageFormatGroup (link)。
ImageFormatGroup 描述了原始图像格式的输出(链接):
cameraController = CameraController(cameras[0],
ResolutionPreset.medium,
imageFormatGroup: ImageFormatGroup.bgra8888);
但我仍然不断获得 yuv420 格式,尽管我已经通过了 ImageFormatGroup.bgra8888 (我使用的是安卓)。
根据这个wiki - RGBA8888我应该得到三个精确尺寸的平面, 但我不断得到:
plane0.bytes.length - 368592
plane1.bytes.length - 184271
plane2.bytes.length - 184271
最终我想将帧从 flutter 传递到 C++,以便使用 OpenCV 处理 RGB 图像。
我也尝试过ImageFormatGroup.jpeg,它拥有一个平面。
有人可以建议一种使用方法吗
CameraController.startImageStream(...)
“开箱即用”RGB 格式的帧?
Flutter相机在IOS平台仅支持BGRA8888。在 Android 上它支持 yuv420 和 JPEG。默认图像格式是 yuv420,这就是为什么当您将图像类型定义为 BGRA8888 时,您会获得 yuv420 中的图像流。
我迟到了,但我希望它能消除其他人的疑虑。