• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

视频教程:YUV和RGB相互转换--MATLAB实现(一)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

大家好:

    我是Gem,今天为大家做个YUV和RGB相互转换的视频作业,要给赵老师看的,现在我们开始吧~~

    软件: MATLAB 7.0

    看我演示啊~~~  我的声音比较小,我很穷啊~~耳麦是内置的,如果听不清楚我说话,就看我操作啊~~

    我们这里操作是讲便携式视频设备(MPEG-4)以及电视会议(H.263)最常用格式YUV420: 4:2:0表示每4个像素有4个亮度分量,2个色度
   
    分量 (YYYYUV), 仅采 样奇数扫描线,对于其他的什么yuv422 和 yuv444,我编了个函数,通用的~~

代码说明:


RGB=imread('test.bmp');                %读入后便是一个RGB矩阵 width,height原始图象的宽度和高度
flag=isrgb(RGB);                       %判读是否为RGB真彩图像
yuv=zeros(width,height,3,'uint8');     %建立1个width*height大小的三维空矩阵,全0,每个元素用8bit数据存储,把这个值赋给yuv
Y=zeros(width,height,'uint8');         %建立1个width*height大小的空矩阵,把这个值赋给Y

yuv=rgb2ycbcr(RGB);                    %调用内部函数rgb2ycbcr,初步处理,转化RGB的值为YcbCr颜色空间,并把数据存储在yuv里面

Y(:,:)=yuv(:,:,1);                     %把yuv第1个矩阵值,赋给亮度Y空间
U=zeros(width/2,height/2,'uint8');     %建立1个(width/2)*(height/2)大小的空矩阵,把这个值赋给色度U
V=zeros(width/2,height/2,'uint8');     %建立1个(width/2)*(height/2)大小的空矩阵,把这个值赋给色度V
U(:,:)=yuv(1:2:width-1,1:2:height-1,2);%从第一个字节开始隔2取1  由于每个像素均保留了U分量
V(:,:)=yuv(1:2:width-1,1:2:height-1,3);%从第一个字节开始隔2取1  由于每个像素均保留了V分量


YY=zeros(width,height,'uint8');           %建立1个width*height大小的空矩阵,把这个值赋给YY
UU=zeros(width,height,'uint8');           %建立1个width*height大小的空矩阵,把这个值赋给UU
VV=zeros(width,height,'uint8');           %建立1个width*height大小的空矩阵,把这个值赋给VV
YY(:,:)=Y(:,:,frame);                     %读取亮度Y某个特定的区域值给YY frame是选择那个区域,这里我们取frame==1
%同上
UU(1:2:width-1,1:2:height-1)=U(:,:,frame);
UU(1:2:width-1,2:2:height)=U(:,:,frame); 
UU(2:2:width,1:2:height-1)=U(:,:,frame); 
UU(2:2:width,2:2:height)=U(:,:,frame);
%并非每个像素均保留了U分量,故还要插值,这里直接用邻近的赋值了,最后恢复到width*height个
%同上
VV(1:2:width-1,1:2:height-1)=V(:,:,frame);
VV(1:2:width-1,2:2:height)=V(:,:,frame);
VV(2:2:width,1:2:height-1)=V(:,:,frame);
VV(2:2:width,2:2:height)=V(:,:,frame);

%YY,UU,VV转置并合并成三维数组   
YUV=cat(3,YY,UU,VV);
RGB=ycbcr2rgb(YUV);                       %逆转换,YUV→RGB               
imshow(RGB)                               %显示转换后的图片

至于原理就不用我讲了吧~~,我已经把YUV422,424,代码都集中在一个函数里面,如有需要请联系~~


RGB=imread( 'test.bmp ');
YUV=rgb2ycbcr(RGB);%转成YUV
RGB= ycbcr2rgb(YUV);%转成RGB
%RGB(:,:,1)为R分量矩阵
%RGB(:,:,2)为G分量矩阵
%RGB(:,:,3)为B分量矩阵
%YUV(:,:,1)为Y分量矩阵
%YUV(:,:,2)为U分量矩阵
%YUV(:,:,3)为V分量矩阵
%公式 Y =  0.2990*R + 0.5780*G + 0.1140*B + 0
%公式 U =  0.5000*R - 0.4187*G - 0.0813*B + 128
%公式 V = -0.1687*R - 0.3313*G + 0.5000*B + 128

视频观看:

            

下载地址:

http://download2.gbaopan.com/9d569485ea5b45ec9f1146aaab642511.gbp?supplierID=1683469


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi与DirectX之DelphiX(61):TDIB.DoEmboss;发布时间:2022-07-18
下一篇:
delphi单元MSHTML之Ihtmldocument2发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap