入门视频采集与处理(显示YUV数据)

转载 2012年03月26日 14:48:11
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/568928

    在《入门视频采集与处理(学会分析YUV数据)》这篇文章中,我们已经学会了如何分析采集到的YUV原始码流,那么,下一步就是如何预览显示所采集的码流了,只有经过显示,才能非常直观地看出自己采集的数据是否有问题。

    关于如何显示原始的YUV码流,根据我的经验,一般有三种方法:

   (1) 利用 matlab ,写相关的程序进行显示。(本文我将提供相关显示程序)

   (2) 使用 MFC + Direct Draw 来实现。(稍后整理好了再提供出来)

   (3) 使用 第三方工具(YUVviewerPlus.exe),很好的软件。(在附件中提供)

    由于使用matlab来进行图像的显示,程序代码简单易懂,直观,维护和修改方便,方便根据不同的图像尺寸和YUV码流存储方式进行相应的修改,故本文重点进行讨论。

    对于采集的图像,我们一般需要重点关注Y分量是否正确,直接显示Y分量数据就可以看到灰度图像,根据显示的灰度图像,我们可以很快地判断出图像的轮廓是否正确。大家可以根据上一节的内容提取出码流中某一帧的Y分量内容,利用下面的程序在matlab中进行显示。

    测试条件: 【图像的尺寸】:720x576;【文件内容】:只有一帧图像的Y分量;

  1. function yuvtest(filename)
  2.  
  3. % 打开图像文件 
  4. fid = fopen(filename,'r'); 
  5. if fid == -1 
  6.     error('the file can not open '); 
  7. end 
  8.  
  9. line = 576;  %图像的高 
  10. colom = 720;  %图像的宽 
  11.  
  12. im = zeros(line,colom); 
  13. for i1 = 1:line 
  14. im(i1,:) = fread(fid,colom);  %读取数据到矩阵中 
  15. end 
  16.  
  17. im = im./255;   %归一化 
  18. figure,imshow(im); %显示图像 
  19.      
  20. fclose(fid); 
  21. end 

    当然,上述程序只能显示出灰度图像,如果希望显示彩色图像,则首先需要把YUV码流转换为RGB数据流,转换公式如下:

  1. // 转换公式(浮点方式) 
  2. R = Y + 1.4075*(V-128) 
  3. G = Y - 0.3455*(U-128) - 0.7169*(V-128) 
  4. B = Y + 1.779*(U-128) 

    至于每一个像素点的YUV分量的值该怎么取,请参考本文开头提到的那篇文章,无论是YUV444、YUV422、还是YUV420格式,根据对应的方法提取完YUV并转换为RGB数据后,其文件大小应该是: 图像的高 * 图像的宽 * 3 。由于不同的YUV码流转换为RGB数据的提取方式均不相同,这里我就不提供统一的转换程序了,大家根据公式和提取YUV的方法自己来转换。

    在写文件的时候,可以考虑以如下的存储格式:

  1. R R R R R  
  2. R R R R R  
  3. R R R R R  
  4.  
  5. G G G G G  
  6. G G G G G  
  7. G G G G G  
  8.  
  9. B B B B B  
  10. B B B B B  
  11. B B B B B 

   存好转换后的RGB文件后,可以利用我提供的下面这个matlab程序进行显示,即可看到彩色图像。

     测试条件: 【图像的尺寸】:720x576;【文件内容】:由R、G、B三个分量分块组成的图像数据;

  1. function showrgb(inputFile) 
  2.  
  3. % 初始化 
  4. width = 720;   %图像的宽 
  5. height = 576;  %图像的高 
  6.  
  7. %打开文件 
  8. fid = fopen(inputFile); 
  9.  
  10. %读取数据 
  11. if fid ~= -1
  12. img = uint8(zeros(height,width,3)); 
  13. img_t = uint8(zeros(height,width));
  14. for i1=1:3 
  15.     for i2=1:height 
  16.          img_t(i2,:)=fread(fid,width);
  17. end 
  18.      img(:,:,i1) = img_t; 
  19.    end 
  20. figure,imshow(img); 
  21. fclose(fid); 
  22.  
  23. end 

      ok,到此,怎样使用matlab显示YUV码流的灰度图像和彩色图像就说到这里了,当然,附件中有一个工具“YUVviewerPlus.exe”也特别好用,可以直接选择YUV码流的格式进行显示。不过我依然建议大家自己动手写相关的matlab程序或者MFC程序来分析自己的码流,这样就可以根据实际情况相应修改代码,而不用局限于人家的软件了。


入门视频采集与处理(显示YUV数据)

在《入门视频采集与处理(学会分析YUV数据)》这篇文章中,我们已经学会了如何分析采集到的YUV原始码流,那么,下一步就是如何预览显示所采集的码流了,只有经过显示,才能非常直观地看出自己采集的数据是否有...
  • melody157398
  • melody157398
  • 2014年06月22日 14:15
  • 1502

视频采集与处理-YUV数据

析 码流 视频采集 RGB YUV 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51ct...
  • u010209897
  • u010209897
  • 2013年12月27日 16:21
  • 1014

opengles2.0 显示yuv数据

原文链接:http://blog.csdn.net/eastlhu/article/details/9382431 cpp] view plaincopy ...
  • zsc09_leaf
  • zsc09_leaf
  • 2013年11月22日 14:39
  • 4258

入门视频采集与处理(BT656简介)转

凡是做模拟信号采集的,很少不涉及BT.656标准的,因为常见的模拟视频信号采集芯片都支持输出BT.656的数字信号,那么,BT.656到底是何种格式呢?       本文将主要介绍 标准的 8bit...
  • benjamin721
  • benjamin721
  • 2015年10月31日 21:17
  • 805

Qt之显示yuv数据图像

Qt之显示yuv数据图像 本文对在QT中实时显示yuv数据提供一个解决方案,再次特别非常感谢http://blog.yundiantech.com/中的博文,也是借鉴其中的播放YUV文件的demo实...
  • x348722662
  • x348722662
  • 2016年12月03日 15:48
  • 4317

入门视频采集与处理(学会分析YUV数据)

做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始...
  • vbLittleBoy
  • vbLittleBoy
  • 2013年09月02日 18:51
  • 2512

入门视频采集与处理(学会分析YUV数据

做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始...
  • wzw12315
  • wzw12315
  • 2013年10月21日 11:56
  • 587

视频数据采集YUV类型数据

做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始...
  • EricFantastic
  • EricFantastic
  • 2015年12月09日 10:43
  • 1119

入门视频采集与处理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/555791  ...
  • hushup
  • hushup
  • 2014年02月17日 17:03
  • 442

如何 分析YUV数据

做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始...
  • wh_19910525
  • wh_19910525
  • 2014年12月16日 16:03
  • 1000
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:入门视频采集与处理(显示YUV数据)
举报原因:
原因补充:

(最多只允许输入30个字)