NV21 字节数组到 array2d<rgb_pixel>
NV21 ByteArray to array2d<rgb_pixel>
嗨,我正在尝试在Android中实现DLIB面部标志性检测。我知道,但是我需要尽可能多的FPS。我面临两个问题,
- 转换链
- 调整大小
目前,我将数据从preview callback
设置到camera
。它输出 NV21 图像的byte[]
。由于DLIB不知道image
,并且只知道array2d<dlib::rgb_pixel>
,因此我需要将数据符合到其中。我得到的实现方法使用了位图,当我尝试使用那里的代码时,我有一系列转换byte[]->bmp->array2d
,我想实现byte[]->array2d
转换。
现在,我需要通过操纵将图像的大小来利用DLIB的性能。尽管我的用例不涉及小面孔,因此我可以缩小输入图像以提高性能,但可以说我成功地进行了byte[]->array2d
转换,我该如何调整图像大小?在位图中调整大小的大小具有许多快速的实现,但是我需要削减位图参与才能提取更多的FPS。我可以选择调整byte[]
或转换后的array2d
,但是……如何?我猜想转换后进行调整大小的好处,因为它现在将在本机上进行操作,而不是在Java上进行操作。
编辑
下刻度应以byte[]
(而不是dlib::arrray2d
)为输入,因为我需要在下调的byte[]
上做某事。
所以我的最后问题是在JNI
上实施此问题byte[] resize(ByteArray img, Size targetSize);
和
dlib::array2d<rgb_pixel> convert(ByteArray img);
这个问题对我有很大帮助,并使我理解了NV21结构。在问题中使用代码我能够从nv21 byte[] to array2d<rgb>
开发转换器。
现在剩下的未完成的是调整大小。
在Java中执行任何调整大小的大小可能是不好的,因为编译器优化差。您最性能的选项CPU可能是在C 中编写一个专门的NV12,然后转换为RGB。交换订单可能只会稍慢一些,并且编写更容易。
您的其他选择是使用着色器在GPU上完成所有选择。GPU在这种事情上的速度更快,但是它们很柔软。无论如何,您可能需要CPU后备(如果出于gpu出于何种原因,不熟悉Android)。
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 C++ 中将 RGB 更改为灰度
- Qt中的RGB图像处理
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 如何将 MJPEG 解码为原始 RGB(或 YUV)数据
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 在RAW图像中提取RGB通道值的库或方法
- 将Kinect v2帧速率(rgb、深度、骨架)设置为每秒25帧
- Qmage:如何将灰色图像转换为RGB热图
- 使用范围(OpenCV)脱粒RGB图像
- 如何将RGB像素缓冲区转换为IRandomAccessStream^
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- #Define , RGB colors for NeoPIxel
- 根据 C++ 中生成的随机数的值生成 Html RGB 值
- 用 c++ 将函数 RGB 写入 HSL
- 为什么延迟太高,即使只是 RGB 到灰色转换 (Vivado HLS)?