标签: yuv

在android的onPreviewFrame中转换YUV-> RGB(图像处理) - > YUV?

我正在使用SurfaceView捕获图像并在public void onPreviewFrame4(byte []数据,相机相机)中获取Yuv Raw预览数据

我必须在onPreviewFrame上执行一些图像预处理,所以我需要将Yuv预览数据转换为RGB数据,而不是图像预处理并返回到Yuv数据.

我使用了两个函数来编码和解码Yuv数据到RGB,如下所示:

public void onPreviewFrame(byte[] data, Camera camera) {
    Point cameraResolution = configManager.getCameraResolution();
    if (data != null) {
        Log.i("DEBUG", "data Not Null");

                // Preprocessing
                Log.i("DEBUG", "Try For Image Processing");
                Camera.Parameters mParameters = camera.getParameters();
                Size mSize = mParameters.getPreviewSize();
                int mWidth = mSize.width;
                int mHeight = mSize.height;
                int[] mIntArray = new int[mWidth * mHeight];

                // Decode Yuv data to integer array
                decodeYUV420SP(mIntArray, data, mWidth, mHeight);

                // Converting int mIntArray to Bitmap and 
                // than image …
Run Code Online (Sandbox Code Playgroud)

ocr android image-processing yuv android-camera

33
推荐指数
6
解决办法
6万
查看次数

将位图数组转换为YUV(YCbCr NV21)

如何将返回的Bitmap转换BitmapFactory.decodeFile()为YUV格式(simillar到相机的onPreviewFrame()返回字节数组)?

android image-processing yuv android-image android-camera

27
推荐指数
2
解决办法
4万
查看次数

使用libyuv库缩放YUV图像时出现的问题

我正在开发基于的相机应用程序Camera API 2,我发现使用libyuv有几个问题.我想转换YUV_420_888从ImageReader中检索到的图像,但是我在可重复处理的表面中进行缩放时遇到了一些问题.

本质上:图像以绿色调而不是具有相应的音调(我正在导出.yuv文件并使用http://rawpixels.net/检查它们).

您可以在此处查看输入示例: 在此输入图像描述

我执行缩放后得到的结果: 在此输入图像描述

我认为我在步幅方面做错了,或提供了无效的YUV格式(也许我必须将图像转换为另一种格式?).但是,我无法弄清楚错误在哪里,因为我不知道如何将绿色与缩放算法相关联.

这是我正在使用的转换代码,您可以忽略返回NULL,因为还有与问题无关的进一步处理.

#include <jni.h>
#include <stdint.h>
#include <android/log.h>
#include <inc/libyuv/scale.h>
#include <inc/libyuv.h>
#include <stdio.h>


#define  LOG_TAG    "libyuv-jni"

#define unused(x) UNUSED_ ## x __attribute__((__unused__))
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS_)

struct YuvFrame {
    int width;
    int height;
    uint8_t *data;
    uint8_t *y;
    uint8_t *u;
    uint8_t *v;
};

static struct YuvFrame i420_input_frame;
static struct YuvFrame i420_output_frame;

extern "C" {

JNIEXPORT jbyteArray JNICALL
Java_com_android_camera3_camera_hardware_session_output_photo_yuv_YuvJniInterface_scale420YuvByteArray(
        JNIEnv *env, …
Run Code Online (Sandbox Code Playgroud)

c++ android image yuv libyuv

27
推荐指数
1
解决办法
2148
查看次数

在Android中显示YUV图像

在我的应用程序中,我们需要显示从服务器接收到我们的Android应用程序的视频帧,
服务器发送视频数据@ 50帧/秒,在WebM中编码,即使用libvpx对图像进行编码和解码,

现在从libvpx解码后得到YUV数据,我们可以在图像布局上显示,

目前的实现是这样的,

在JNI/Native C++代码中,我们将YUV数据转换为RGB数据在Android框架中调用

public Bitmap createImgae(byte[] bits, int width, int height, int scan) {
    Bitmap bitmap=null;
    System.out.println("video: creating bitmap");
    //try{

            bitmap = Bitmap.createBitmap(width, height,
                    Bitmap.Config.ARGB_8888);
            bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bits));     

    //}catch(OutOfMemoryError ex){

    //}
            System.out.println("video: bitmap created");
    return bitmap;
}  
Run Code Online (Sandbox Code Playgroud)

要创建位图图像,

使用以下代码在imageView上显示图像,

               img = createImgae(imgRaw, imgInfo[0], imgInfo[1], 1);
               if(img!=null && !img.isRecycled()){

                    iv.setImageBitmap(img);
                    //img.recycle();
                    img=null;
                    System.out.println("video: image displayed");
                }
Run Code Online (Sandbox Code Playgroud)

我的查询是,总的来说这个功能需要大约40毫秒,有没有办法优化它,
1 - 有没有办法向imageView显示YUV数据?

2 - 还有其他方法可以从RGB数据创建图像(位图图像​​),

3 - 我相信我总是在创建图像,但我想我应该只创建一次位图,并在我们收到时始终提供/提供新的缓冲区.
请分享您的观点.

android image-processing yuv imageview

26
推荐指数
1
解决办法
4万
查看次数

使用FFMPEG将YUV无损转换为另一种格式,以便在Adobe Premier中进行编辑

我有一个原始的YUV视频文件,我想在Adobe CS6 Premiere中进行一些基本的编辑,但它无法识别该文件.我想用ffmpeg把它转换成Premiere会接受的东西,但我希望这是无损的,因为之后我会再次以YUV格式需要它.我想到了avi,mov和prores,但我似乎无法弄清楚ffmpeg的正确命令行以及如何确保它是无损的.

谢谢你的帮助.

ffmpeg yuv

26
推荐指数
1
解决办法
8万
查看次数

YUV_420_888解读三星Galaxy S7(Camera2)

我写了一个从YUV_420_888到Bitmap的转换,考虑到以下逻辑(据我所知):

在此输入图像描述

总结该方法:内核的坐标x和y与Y平面(2d分配)的非填充部分的x和y以及输出位图的x和y都是一致的.然而,U平面和V平面具有与Y平面不同的结构,因为它们使用1个字节覆盖4个像素,此外,可能具有多于一个的PixelStride,此外它们可能也有一个可以与Y平面不同的填充.因此,为了通过内核有效地访问U和V,我将它们放入1-d分配并创建索引"uvIndex",该索引给出了在给定的1-d分配中相应的U-和V的位置( x,y)坐标(非填充)Y平面(以及输出位图).

为了保持rs-Kernel的精简,我通过LaunchOptions限制x范围来排除yPlane中的填充区域(这反映了y平面的RowStride,因此可以在内核中忽略).所以我们只需要考虑uvIndex中的uvPixelStride和uvRowStride,即用于访问u值和v值的索引.

这是我的代码:

Renderscript内核,名为yuv420888.rs

  #pragma version(1)
  #pragma rs java_package_name(com.xxxyyy.testcamera2);
  #pragma rs_fp_relaxed

  int32_t width;
  int32_t height;

  uint picWidth, uvPixelStride, uvRowStride ;
  rs_allocation ypsIn,uIn,vIn;

 // The LaunchOptions ensure that the Kernel does not enter the padding  zone of Y, so yRowStride can be ignored WITHIN the Kernel.
 uchar4 __attribute__((kernel)) doConvert(uint32_t x, uint32_t y) {

 // index for accessing the uIn's and vIn's
uint uvIndex=  uvPixelStride * (x/2) + uvRowStride*(y/2);

// get the y,u,v values
uchar yps= rsGetElementAt_uchar(ypsIn, x, y);
uchar …
Run Code Online (Sandbox Code Playgroud)

android yuv android-camera2

26
推荐指数
2
解决办法
8854
查看次数

在Android上旋转YUV字节数组

我正在寻找旋转从预览Callblack收到的YUV帧预览,到目前为止我已经创建了这个帖子,其中包含一个算法来旋转帧预览,但是正在弄乱预览图像 相机像素旋转

旋转图像的另一种方法是从YUV图像中创建一个jpg,创建一个位图,旋转一个位图并获得位图的字节数组,但我真的需要YUV格式(NV21).

仅供参考.我问这个的原因是因为我有一个支持旋转的相机应用程序,但框架预览仅以横向模式返回.

android bytearray rotation yuv

22
推荐指数
2
解决办法
2万
查看次数

Camera2 API中的Camera.PreviewCallback等价物

在API 21中的Camera2中是否有相同的Camera.PreviewCallback,比映射到SurfaceTexture并拉出位图更好?我需要能够以YUV的形式从相机中提取预览数据吗?

android yuv android-hardware android-camera android-5.0-lollipop

19
推荐指数
2
解决办法
1万
查看次数

如何处理RGB到YUV的转换

公式说:

Y = 0.299 * R + 0.587 * G + 0.114 * B;

U = -0.14713 * R - 0.28886 * G + 0.436 * B;

V = 0.615 * R - 0.51499 * G - 0.10001 * B;
Run Code Online (Sandbox Code Playgroud)

例如,如果U变量变为负数怎么办?

U = -0.14713 * R - 0.28886 * G + 0.436 * B;
Run Code Online (Sandbox Code Playgroud)

假设R和G(1)的最大值和B = 0那么,我有兴趣在OpenCV中实现这个对流函数,那么,如何处理负值?使用浮动图像?无论如何请解释我,可能是我不明白的东西..

opencv image-processing yuv

17
推荐指数
2
解决办法
2万
查看次数

将Android camera2 api YUV_420_888转换为RGB

我正在编写一个应用摄像头的应用程序,将其转换为rgb,以便进行一些处理.

它适用于使用NV21 Yuv格式的旧相机实现.我遇到的问题是使用新的Yuv格式YUV_420_888.在新的Camera2 Api中,图像不再正确转换为RGB,后者发送YUV_420_888 yuv格式而不是NV21(YUV_420_SP)格式.

有人可以告诉我如何将YUV_420_888转换为RGB?

谢谢

rgb android yuv android-camera android-5.0-lollipop

17
推荐指数
3
解决办法
1万
查看次数