标签: yuv

如何从YUV420p转换为ffmpeg编码器的RGB?

我想使用c ++代码从位图图像制作.avi视频文件.我写了以下代码:

//Get RGB array data from bmp file
uint8_t* rgb24Data = new uint8_t[3*imgWidth*imgHeight];
hBitmap = (HBITMAP) LoadImage( NULL, _T("myfile.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetDIBits(hdc, hBitmap, 0, imgHeight, rgb24Data , (BITMAPINFO*)&bmi, DIB_RGB_COLORS);

/* Allocate the encoded raw picture. */
AVPicture dst_picture;
avpicture_alloc(&dst_picture, AV_PIX_FMT_YUV420P, imgWidth, imgHeight);

/* Convert rgb24Data to YUV420p and stored into array dst_picture.data */
RGB24toYUV420P(imgWidth, imgHeight, rgb24Data, dst_picture.data); //How to implement this function?

//code for encode frame dst_picture here
Run Code Online (Sandbox Code Playgroud)

我的问题是如何实现RGB24toYUV420P()函数,这个函数会将RGB24数据从数组rgb24Data 转换为YUV420p存储到dst_picture.data …

rgb ffmpeg yuv video-encoding

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

如何转换RGB - > YUV - > RGB(双向)

我想要一对转换算法,一个从RGB到YUV,另一个从YUV到RGB,它们是彼此相反的.也就是说,往返转换应保持值不变.(如果您愿意,将YUV替换为Y'UV,YUV,YCbCr,YPbPr.)

这样的事情存在吗?如果是这样,它是什么?

发布的解决方案(如何在C/C++中执行RGB-> YUV转换?,http://www.fourcc.org/fccyvrgb.php,http://en.wikipedia.org/wiki/YUV)只是反转(当省略钳位到[0,255]时,两个3x3矩阵是反转的).但是省略这种钳位可以产生负亮度,这会对YUV空间中的图像处理造成严重破坏.保持钳位使转换非线性,这使得定义逆变得棘手.

c c++ rgb yuv bidirectional

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

PIL的色彩空间转换YCbCr - > RGB

PIL v1.1.7使用的算法给出了"褪色"的结果.使用ffmpeg它转换相同的源数据时看起来是正确的.使用mplayer给出相同的结果ffmpeg(也许他们使用下面的相同库).这让我相信PIL可能会填充色彩空间转换.转换似乎来自libImaging/ConvertYCbCr.c:

/*  JPEG/JFIF YCbCr conversions

    Y  = R *  0.29900 + G *  0.58700 + B *  0.11400
    Cb = R * -0.16874 + G * -0.33126 + B *  0.50000 + 128
    Cr = R *  0.50000 + G * -0.41869 + B * -0.08131 + 128

    R  = Y +                       + (Cr - 128) *  1.40200
    G  = Y + (Cb - 128) * -0.34414 + (Cr - 128) …
Run Code Online (Sandbox Code Playgroud)

c python rgb yuv python-imaging-library

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

iOS - 如何使用openGL绘制YUV图像

目前,我正在尝试使用openGL绘制图像(图像经常更新,因此必须重新绘制).以前,我将我的图像从YUV转换为RGB,然后使用这个新图像用openGL绘制.一切正常,但转换过程并不是特别快.

我现在正在尝试更改代码,以便在openGL着色器中处理转换.环顾四周后,我发现了一些代码片段(特别是着色器和我的renderImage函数的大部分),这些代码片段帮助我获得了基线,但我似乎无法真正得到正确绘制的图像 - 所有我曾经看是一个黑色的图像.

我很可能错过了一些非常简单和重要的东西 - 我对openGL的体验相当有限.如果有人可以看看,看看他们是否认识到任何错误,请告诉我.

我应该指出,我正在尝试支持iOS 4.x,因此CVOpenGLESTextureCacheCreateTextureFromImage不应该可用(即使我想要,我也不是很积极如何设置使用它).

任何帮助,将不胜感激.代码如下 -

我的顶点着色器:

attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;

void main()
{
    gl_Position = position;
    textureCoordinate = inputTextureCoordinate.xy;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

#ifdef GL_ES
precision mediump float;
#endif

varying vec2 textureCoordinate;

uniform sampler2D videoFrame;
uniform sampler2D videoFrameUV;

const mat3 yuv2rgb = mat3(
                          1, 0, 1.2802,
                          1, -0.214821, -0.380589,
                          1, 2.127982, 0
                          );

void main() {
    vec3 yuv = vec3(
                    1.1643 * (texture2D(videoFrame, textureCoordinate).r - 0.0625),
                    texture2D(videoFrameUV, textureCoordinate).r - 0.5,
                    texture2D(videoFrameUV, …
Run Code Online (Sandbox Code Playgroud)

opengl-es yuv ios

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

YUV420和YUV422之间的区别

你能帮我理解YUV420和YUV422格式有什么区别吗?我读到这个,http://www.fourcc.org/yuv.php,但我找不到区别.

"YUV420"和"YUV420 SP"的意思是一样的吗?"YUV422"和"YUV422 I"是否意味着同样的事情?

谢谢.

image-processing yuv

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

将android.media.Image(YUV_420_888)转换为Bitmap

我正在尝试使用这里提出的camera2 api实现相机预览图像数据处理:使用Android L和Camera2 API进行相机预览图像数据处理.

我使用onImageAvailableListener成功接收回调,但是为了将来的处理,我需要从YUV_420_888 android.media.Image获取位图.我搜索了类似的问题,但没有一个帮助.

你能否建议我如何将android.media.Image(YUV_420_888)转换为Bitmap,或者有更好的方法来监听预览帧?

android bitmap yuv android-camera

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

我在哪里可以获得原始的YUV文件?

我需要一个原始的YUV文件用于研究目的.尺寸和内容都不重要.关于这些文件存在的任何想法?

yuv

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

rgb到yuv420算法效率

我写了一个算法将RGB图像转换为YUV420.我花了很长时间试图让它变得更快,但我还没有找到任何其他方法来提高效率,所以现在我转向你,这样你就可以告诉我这是否和我一样好,或者是否有另一种效率更高这样做的方法(算法在C++中,但C和汇编程序也是选项)

namespace {
// lookup tables
int lookup_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,
  -2256,  -2350,  -2444,  -2538,  -2632,  -2726,  -2820,  -2914,
  -3008,  -3102,  -3196,  -3290,  -3384,  -3478,  -3572,  -3666,
  -3760,  -3854,  -3948,  -4042,  -4136,  -4230,  -4324,  -4418,
  -4512,  -4606,  -4700,  -4794,  -4888,  -4982,  -5076,  -5170,
  -5264,  -5358,  -5452,  -5546,  -5640,  -5734,  -5828,  -5922,
  -6016,  -6110,  -6204,  -6298,  -6392,  -6486, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm rgb performance yuv

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

在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万
查看次数

YUV 422,YUV 420,YUV 444

我有例如4*4图像.我想分别提取Y,U和V组件.如果图像是YUV 422,YUV 420和YUV444,该怎么做.我有兴趣知道数组的结构如何在422,420和444中存储Y,U和V,以便可以访问它.

c opencv image-processing yuv

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