草庐IT

Android 使用渲染脚本将 ImageReader Image 转换为 YCbCr_420_SP (NV21) 字节数组?

我目前正在使用Javacv它利用了publicvoidonPreviewFrame(byte[]data,Cameracamera)相机功能。由于不推荐使用相机,我一直在研究camera2和MediaProjection.这两个库都使用ImageReaderclass.目前我用以下代码实例化这样一个ImageReader:ImageReader.newInstance(DISPLAY_WIDTH,DISPLAY_HEIGHT,PixelFormat.RGBA_8888,2);并像这样附加一个OnImageAvailableListener:privatefinalImageReader

Android 使用渲染脚本将 ImageReader Image 转换为 YCbCr_420_SP (NV21) 字节数组?

我目前正在使用Javacv它利用了publicvoidonPreviewFrame(byte[]data,Cameracamera)相机功能。由于不推荐使用相机,我一直在研究camera2和MediaProjection.这两个库都使用ImageReaderclass.目前我用以下代码实例化这样一个ImageReader:ImageReader.newInstance(DISPLAY_WIDTH,DISPLAY_HEIGHT,PixelFormat.RGBA_8888,2);并像这样附加一个OnImageAvailableListener:privatefinalImageReader

java - 将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

我有一个android应用程序,我想在其中对来自androidCamera2API的实时图像运行一些OpenCV图像处理。目前,如果我不进行任何处理,我可以在OnImageAvailble函数中以30fps的速度接收常规1280x720帧的图像。现在,作为一个肮脏的黑客,我从ImageReader以JPEG格式请求图像,然后将位图传递给jni,这大大降低了性能。将YUV帧传递给cvMat对象中的jni的最有效方法是什么。另外,我想将此帧转换为RGB以进行进一步处理。我应该在Java端更改格式还是应该将Mat对象传递给jni并仅在此处转换颜色空间。 最佳答案

java - 将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

我有一个android应用程序,我想在其中对来自androidCamera2API的实时图像运行一些OpenCV图像处理。目前,如果我不进行任何处理,我可以在OnImageAvailble函数中以30fps的速度接收常规1280x720帧的图像。现在,作为一个肮脏的黑客,我从ImageReader以JPEG格式请求图像,然后将位图传递给jni,这大大降低了性能。将YUV帧传递给cvMat对象中的jni的最有效方法是什么。另外,我想将此帧转换为RGB以进行进一步处理。我应该在Java端更改格式还是应该将Mat对象传递给jni并仅在此处转换颜色空间。 最佳答案

android - 三星 Galaxy S7 (Camera2) 上的 YUV_420_888 解读

我写了一个从YUV_420_888到Bitmap的转换,考虑到以下逻辑(据我所知):总结该方法:内核的坐标x和y与Y平面(2d分配)的非填充部分的x和y以及输出位图的x和y都一致。然而,U平面和V平面的结构与Y平面不同,因为它们使用1个字节来覆盖4个像素,此外,它们的PixelStride可能大于1,此外它们可能也有一个可以与Y平面不同的填充。因此,为了让内核有效地访问U和V,我将它们放入一维分配中并创建了一个索引“uvIndex”,它给出了对应的U和V在该一维分配中的位置,对于给定的(x,y)在(未填充的)Y平面(以及输出位图)中的坐标。为了保持rs-Kernel精简,我通过Laun

android - 三星 Galaxy S7 (Camera2) 上的 YUV_420_888 解读

我写了一个从YUV_420_888到Bitmap的转换,考虑到以下逻辑(据我所知):总结该方法:内核的坐标x和y与Y平面(2d分配)的非填充部分的x和y以及输出位图的x和y都一致。然而,U平面和V平面的结构与Y平面不同,因为它们使用1个字节来覆盖4个像素,此外,它们的PixelStride可能大于1,此外它们可能也有一个可以与Y平面不同的填充。因此,为了让内核有效地访问U和V,我将它们放入一维分配中并创建了一个索引“uvIndex”,它给出了对应的U和V在该一维分配中的位置,对于给定的(x,y)在(未填充的)Y平面(以及输出位图)中的坐标。为了保持rs-Kernel精简,我通过Laun

c++ - rgb转yuv420算法效率

我编写了一个算法来将RGB图像转换为YUV420。我花了很长时间试图让它更快,但我还没有找到任何其他方法来提高它的效率,所以现在我求助于你,你可以告诉我这是否和我得到的一样好,或者是否还有其他更有效的方法方法(算法在C++中,但C和汇编器也是选项)namespace{//lookuptablesintlookup_m_94[]={0,-94,-188,-282,-376,-470,-564,-658,-752,-846,-940,-1034,-1128,-1222,-1316,-1410,-1504,-1598,-1692,-1786,-1880,-1974,-2068,-2162,-

c++ - rgb转yuv420算法效率

我编写了一个算法来将RGB图像转换为YUV420。我花了很长时间试图让它更快,但我还没有找到任何其他方法来提高它的效率,所以现在我求助于你,你可以告诉我这是否和我得到的一样好,或者是否还有其他更有效的方法方法(算法在C++中,但C和汇编器也是选项)namespace{//lookuptablesintlookup_m_94[]={0,-94,-188,-282,-376,-470,-564,-658,-752,-846,-940,-1034,-1128,-1222,-1316,-1410,-1504,-1598,-1692,-1786,-1880,-1974,-2068,-2162,-

用FFmpeg把H264数据流解码成YUV420P

在FFmpeg中,H264在编码前必须要转换成YUV420P,本文就分享一下怎么将h264转成YUV420P。以下就是yuv420:八个像素为:[Y0U0V0][Y1U1V1][Y2U2V2][Y3U3V3][Y5U5V5][Y6U6V6][Y7U7V7][Y8U8V8]码流为:Y0U0Y1Y2U2Y3Y5V5Y6Y7V7Y8映射出的像素点为:[Y0U0V5][Y1U0V5][Y2U2V7][Y3U2V7][Y5U0V5][Y6U0V5][Y7U2V7][Y8U2V7]注意:码流12字节个代表8个像素理解需要画矩阵,如下:码流数据:(4:2:0~4:0:2)Y0U0Y1Y2U2Y3Y5V5Y6

用FFmpeg把H264数据流解码成YUV420P

在FFmpeg中,H264在编码前必须要转换成YUV420P,本文就分享一下怎么将h264转成YUV420P。以下就是yuv420:八个像素为:[Y0U0V0][Y1U1V1][Y2U2V2][Y3U3V3][Y5U5V5][Y6U6V6][Y7U7V7][Y8U8V8]码流为:Y0U0Y1Y2U2Y3Y5V5Y6Y7V7Y8映射出的像素点为:[Y0U0V5][Y1U0V5][Y2U2V7][Y3U2V7][Y5U0V5][Y6U0V5][Y7U2V7][Y8U2V7]注意:码流12字节个代表8个像素理解需要画矩阵,如下:码流数据:(4:2:0~4:0:2)Y0U0Y1Y2U2Y3Y5V5Y6