我有一个android应用程序,我想在android Camera2
API的实时图像上运行一些OpenCV
图像处理。目前,如果我不做任何处理,对于一个常规的1280x720
帧,我能够以30fps的速度接收OnImageAvailble
函数中的图像。
现在,作为一个肮脏的黑客,我从ImageReader请求JPEG格式的图像,然后将位图传递给jni
,这会大大降低性能。
将YUV帧传递给cv Mat
对象中的jni
的最有效方法是什么?此外,我希望将此帧转换为RGB
进行进一步处理。我应该在Java端更改格式,还是应该将Mat
对象传递给jni
并仅在那里转换色彩空间。
发布于 2018-09-05 21:05:42
也许对你有帮助:由于我们做了大量的图像处理,我们公司为此编写了一个库。它不是用C语言编写的,但它的性能相当好。在转换之后,您可以简单地通过JNI将Mat指针向下传递到C代码。
它可以将YUV(标准安卓相机格式YUV_420_888)转换为RGB。此外,它还允许在转换之前对YUV进行有效的裁剪(对于非常大的图像很重要,否则您将需要转换整个图像,然后进行裁剪,这是昂贵的)。使用方法非常简单:
Mat mat = Yuv.toMat(image)
https://stackoverflow.com/questions/50677063
复制相似问题