Opencv/C++-将NV21转换为RGB并在android应用程序中生成位图



我正在开发一个应用程序,该应用程序通过JNI层从onPreviewFrame()回调中获取NV21缓冲区,然后在C++中使用OpenCV将其转换为RGB。以下是示例代码:

Mat yuv(height+height/2, width, CV_8UC1, inBuffer);
Mat rgb(height, width, CV_8UC3);
cvtColor(yuv, rgb, COLOR_YUV2RGB_NV21);

现在在android应用程序中,我取回rgb缓冲区,并尝试通过生成位图来显示它:

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
bitmap.createPixelsFromBuffer(ByteBuffer.wrap(imageBuffer));

但是,它不能显示正确的图像。有人知道我在这里错过了什么吗?

在位图配置中将Bitmap.Config.RGB_565更改为Bitmap.Config.ARGB_8888

来自android开发者文档,

位图。配置RGB_565

每个像素存储在2个字节上,并且仅对RGB通道进行编码:红色存储精度为5位(32个可能值),绿色为以6位精度(64个可能值)存储蓝色具有5位精度。

此外,在您的本机函数调用中,使用COLOR_YUV2RGBA_NV21保留一个4通道Mat.Convert。

相关内容

  • 没有找到相关文章

最新更新