gpt4 book ai didi

android - 如何将Otaliastudios Frame对象转换为OpenCV Mat对象?

转载 作者:行者123 更新时间:2023-12-02 17:05:20 30 4
gpt4 key购买 nike

我正在使用otaliastudios库中的com.otaliastudios.cameraview.CameraView组件。我需要将某些框架转换为Mat对象,以使用OpenCV处理。如何将Otaliastudios Frame对象转换为OpenCV Mat对象?

编辑:我正在使用的框架类位于:github.com/natario1/CameraView/blob/master/cameraview/src/main/java/com/otaliastudios/cameraview/Frame.java

我怎么知道这是哪种图像格式?这有什么不同吗?

最佳答案

您需要知道手机摄像头框架的源格式。

Frame对象包含一个byte []数据字段。此字段可能与相机的ImageFormat相同。两种最常见的格式是NV21和YUV_420_888。

YUV格式由一个亮度分量Y和另一个称为色度(U-V)的分量组成。

通常,这两种成分的关系(因此是实际的位/字节大小)是通过减少色度成分的方法定义的,因为人眼对亮度的变化比对颜色的变化更敏感(请参阅Chroma Subsampling)。减少由一组数字表示,例如4:2:0。

在这种情况下,与色度有关的部分是亮度的一半。
因此,一帧的字节大小可能具有等于宽度X高度字节的亮度的一部分和等于宽度X(高度/ 2)字节的色度的一部分。这意味着字节大小在很大程度上取决于您要获取的图像格式,因此您必须修改垫子大小并根据此选择CvType。

您必须分配一个与框架大小相同的垫子,然后将数据放入其中(来自this answer):

mYuv = new Mat(getFrameHeight() + getFrameHeight() / 2, 
getFrameWidth(), CvType.CV_8UC1);

....

mYuv.put(0, 0, data);

然后您有了Mat。如果还需要转换为RGB格式,请检查此 page的底部。

希望这会帮助你。

关于android - 如何将Otaliastudios Frame对象转换为OpenCV Mat对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800425/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com