标签: yuv

在OpenGl方面需要帮助YUV显示

我在显示NV12格式的原始YUV文件时遇到问题.

我可以显示一个选定的框架,然而,它仍然主要是黑色和白色,具有一定的粉红色和绿色.

以下是我的输出看起来像 alt文本http://i32.tinypic.com/hv0vih.png

无论如何,这是我的程序的工作方式.(这是在cocoa/objective-c中完成的,但我需要你对程序算法的专家建议,而不是语法.)

在程序执行之前,YUV文件存储在名为"test.yuv"的二进制文件中.该文件采用NV12格式,这意味着首先存储Y计划,然后隔行扫描UV计划.我的文件提取没有问题,因为我做了很多测试.

在启动期间,我创建了一个查找表,它将二进制/ 8位/字节/字符转换为受尊重的Y,U,V浮点值

对于Y平面,这是我的代码

-(void)createLookupTableY //creates a lookup table for converting a single byte into a float between 0 and 1
{
    NSLog(@"YUVFrame: createLookupTableY");
    lookupTableY = new float [256];

    for (int i = 0; i < 256; i++)
    {
        lookupTableY[i] = (float) i /255;
        //NSLog(@"lookupTableY[%d]: %f",i,lookupTableY[i]);//prints out the value of each float
    }
}
Run Code Online (Sandbox Code Playgroud)

U Plane查找表

-(void)createLookupTableU //creates a lookup table for converting a single byte into a float between 0 and 1
{
    NSLog(@"YUVFrame: …
Run Code Online (Sandbox Code Playgroud)

opengl rgb objective-c yuv

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

将预览帧转换为位图

我知道这个主题多次出现在主板上,但我无论如何都无法工作......我想保存从预览到jpeg文件的视图帧.它看起来或多或少(代码简化 - 没有额外的逻辑,例外等)像这样......

public void onPreviewFrame(byte[] data, Camera camera) {
  int width = camera.getParameters().getPreviewSize().width;
  int height = camera.getParameters().getPreviewSize().height;


  final int[] rgb = decodeYUV420SP(data, width, height);

  Bitmap bmp = Bitmap.createBitmap(rgb, width, height,Bitmap.Config.ARGB_8888);

  String filename="/sdcard/file" + (index++)+ ".jpg"; 
  FileOutputStream out;
  out = new FileOutputStream(filename);
  bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
  out.flush();
  out.close();
  out=null;

 }
Run Code Online (Sandbox Code Playgroud)

这是我尝试转换颜色的方法之一(我相信这个板)

public int[] decodeYUV420SP( byte[] yuv420sp, int width, int height) {   

    final int frameSize = width * height;   

    int rgb[]=new int[width*height];   
    for (int j = 0, yp = 0; j < …
Run Code Online (Sandbox Code Playgroud)

camera android yuv frame preview

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

如何在C/C++中执行RGB-> YUV转换?

如何在C/C++中执行RGB-> YUV转换?

我有一些Bitmap .. RGB我需要将它转换为YUV

库?TUTS?文章?

c c++ rgb yuv

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

Apple A4上的YUV到RGBA,我应该使用着色器还是NEON?

我正在使用OpenGL ES和ffmpeg为Apple TV编写媒体播放器框架.在OpenGL ES上渲染需要转换为RGBA,使用swscale进行软转换是无法忍受的慢速,因此在互联网上使用信息我提出了两个想法:使用neon(如此)或使用片段着色器以及GL_LUMINANCE和GL_LUMINANCE_ALPHA.

我几乎对OpenGL一无所知,第二个选项仍然无效:)

你能指点一下如何继续吗?先感谢您.

rgb yuv ios opengl-es-2.0 apple-tv

10
推荐指数
1
解决办法
7256
查看次数

使用新的Android camera2 api从YUV_420_888进行JPEG编码时的绿色图像

我正在尝试使用新的相机api.突发捕获速度太慢,因此我在ImageReader中使用YUV_420_888格式并稍后进行JPEG enconding,如以下帖子中所示:

Android camera2捕获突发太慢了

问题是当我尝试使用RenderScript从YUV_420_888编码JPEG时,我得到绿色图像,如下所示:

RenderScript rs = RenderScript.create(mContext);
ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs));
Type.Builder yuvType = new Type.Builder(rs, Element.YUV(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YUV_420_888);
Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);

Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);

in.copyFrom(data);

yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);

Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
out.copyTo(bmpout);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpout.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpegBytes = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

数据变量(YUV_420_888数据)来自:

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);
Run Code Online (Sandbox Code Playgroud)

我在JPEG编码中做错了什么才能使图像只显示为绿色?

提前致谢

编辑:这是我获得的绿色图像的示例:

https://drive.google.com/file/d/0B1yCC7QDeEjdaXF2dVp6NWV6eWs/view?usp=sharing

rgb android yuv android-camera android-5.0-lollipop

10
推荐指数
1
解决办法
5707
查看次数

图像格式化内存中的NV12存储

我完全理解所讨论的NV12格式的大小

NV12格式和UV平面

现在我正在阅读有关以这种格式存储UV平面的两个来源:一个是https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx

NV12

所有Y样本首先在内存中显示为具有偶数行的无符号字符值数组.Y平面后面紧跟着一组无符号字符值,其中包含打包的U(Cb)和V(Cr)样本.当组合的UV数组作为little-endian WORD值的数组寻址时,LSB包含U值,并且MSB包含V值.NV12是DirectX VA的首选4:2:0像素格式.预计这将是支持4:2:0视频的DirectX VA加速器的中期要求.下图显示了Y平面和包含U和V样本的数组.

我的理解是:在UV平面中,每个U和V都以单字节存储.

当我从维基百科阅读这篇文章时:https: //wiki.videolan.org/YUV#NV12

它说:

NV12

与I420相关,NV12具有一个亮度"亮度"平面Y和一个具有U和V值交错的平面.在NV12中,色度平面(蓝色和红色)在水平和垂直维度上进行二次采样,系数为2.对于2x2像素组,您有4个Y样本和1个U和1个样本.将NV12视为I420与U和V平面交错是有帮助的.这是NV12的图形表示.每个字母代表一位:对于1 NV12像素:YYYYYYYY UVUV对于2像素NV12帧:YYYYYYYYYYYYYYY UVUVUVUV对于50像素NV12帧:Y*8*50(UV)*2*50对于n像素NV12帧:Y*8*n(UV)*2*n

我在这里理解的是:每个U和V在每个字节中逐位交错.因此,UV平面的每个字节将包含4U位和4V位交错.

任何人都可以澄清我的怀疑吗?

image-processing yuv image-formats nv12-nv21

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

如何模拟GL_TEXTURE_EXTERNAL_OES纹理?

我有一个OpenGL ES 2.0 QNX应用程序,它使用相机输入,进行一些处理并呈现屏幕内容.

我的所有着色器都将相机的GL_TEXTURE_EXTERNAL_OES纹理作为输入,其格式为YUV422.

我想使用png格式的RGB图像在目标平台(QNX)上测试我的应用程序.

问题是:如何从RGB图像创建GL_TEXTURE_EXTERNAL_OES纹理,以模拟我的应用程序从相机输入?

textures opengl-es yuv qnx opengl-es-2.0

10
推荐指数
1
解决办法
287
查看次数

420YpCbCr8BiPlanarVideoRange到YUV420?/如何将Y和Cbcr平面复制到单平面?

我使用AVFoundation捕获了视频.我已设置(视频设置)并获得outputsamplebuffer kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange格式.但我需要YUV420格式进行进一步处理.

我怀疑是

中1.difference 420YpCbCr8BiPlanarVideoRange,420YpCbCr8BiPlanarFULLRange, 420YpCbCr8PlanarFullRange,420YpCbCr8Planar和YUV420?
2.我可以将420YpCbCr8BiPlanarVideoRange转换为YUV420吗?
3.如何将YUV420转换为32BGRA?

4)或其他一些方法来做到这一点??? 这是任何开源库或Apple Framework ....

我已经经历了加速框架......它有以下planar8,planerF,RGBA8888等的图像转换 ...任何方式与这些格式相等 32BGRA/YUV420/ 420YpCbCr8BiPlanarVideoRange 并做我的要求?????

提前致谢

提前致谢

iphone image-processing yuv avfoundation

9
推荐指数
1
解决办法
6405
查看次数

sws_scale YUV - > RGB失真图像

我想将YUV420P图像(从H.264流中接收)转换为RGB,同时也调整大小,使用sws_scale.
原始图像的大小是480 × 800.只需转换相同的尺寸即可.
但是当我尝试更改尺寸时,我得到一个扭曲的图像,具有以下模式:

  • 改变为481 × 800将产生扭曲的B&W图像,看起来像是在中间切割
  • 482 × 800 将更加扭曲
  • 483 × 800 是扭曲但颜色
  • 484 × 800 没问题(缩放正确).

现在这个模式如下 - 如果除以4之间的差异,缩放将只能正常工作.

这是我解码和转换图像的方式的示例代码.所有方法都显示"成功".

int srcX = 480;
int srcY = 800;
int dstX = 481; // or 482, 483 etc
int dstY = 800;

AVFrame* avFrameYUV = avcodec_alloc_frame();
avpicture_fill((AVPicture *)avFrameYUV, decoded_yuv_frame, PIX_FMT_YUV420P, srcX , srcY);

AVFrame *avFrameRGB = avcodec_alloc_frame();

AVPacket avPacket;
av_init_packet(&avPacket);
avPacket.size = read; // size …
Run Code Online (Sandbox Code Playgroud)

c++ ffmpeg yuv libavcodec

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

调整大小(缩小尺寸)YUV420sp图像

我正在尝试调整(缩小)YUV420sp格式的图像.是否可以在不将其转换为RGB的情况下进行此类图像调整,从而直接操作YUV420sp像素阵列?我在哪里可以找到这样的算法?

谢谢

yuv image-resizing

9
推荐指数
2
解决办法
8105
查看次数