- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用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);
关于android - 如何将Otaliastudios Frame对象转换为OpenCV Mat对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800425/
我是一名优秀的程序员,十分优秀!