首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在接口中将RGB转换为YUV,然后恢复

如何在接口中将RGB转换为YUV,然后恢复
EN

Stack Overflow用户
提问于 2015-03-25 06:15:34
回答 1查看 2.4K关注 0票数 2

我想把一个RGB图片转换成YUV,当我在MATLAB中计算时,我发现图片并不完全符合原图。这是我在matlab中的操作!这是我的代码:

代码语言:javascript
复制
%M file
clear all;  
clc;  
RGB = imread('11111.bmp');  
figure;imshow(RGB);

R = RGB(:,:,1);  
G = RGB(:,:,2);  
B = RGB(:,:,3);

Y0= 0.256788*R + 0.504129*G + 0.097906*B +  16;
U0=-0.148223*R - 0.290993*G + 0.439216*B + 128;
V0= 0.439216*R - 0.367788*G - 0.071427*B + 128;
Y= uint8(min(255,max(0,Y0)));% i want 8 bit YUV
U= uint8(min(255,max(0,U0)));
V= uint8(min(255,max(0,V0)));
RGB1R=Y+1.14 *V;
RGB1G=Y-0.39 *U-0.58*V;
RGB1B=Y+2.03*U;
RGB1=cat(3, RGB1R, RGB1G, RGB1B);
figure; imshow(RGB1);  
%M file

应该指出的是,图像是胶囊内窥镜,image.you可以在wwww.gastrolab.net得到它,.i想要的YUV是8位接口,有人能帮我吗??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 15:41:50

为了在RGB和YCbCr之间进行转换,MATLAB提供了rgb2ycbcrycbcr2rgb函数。然后,YCbCr和YUV被

代码语言:javascript
复制
Y = Y
U = 0.872021 Cb
V = 1.229951 Cr

要将RGB图像转换为YUV,可以使用

代码语言:javascript
复制
RGB = imread('11111.bmp');  
YCBCR = rgb2ycbcr(RGB);
YUV(:,:,1) = YCBCR(:,:,1);               % Y  -> Y
YUV(:,:,2) = 0.872021 * YCBCR(:,:,2);    % Cb -> U
YUV(:,:,3) = 1.229951 * YCBCR(:,:,3);    % Cr -> V

若要将其转换回来,请使用

代码语言:javascript
复制
YCBCR1(:,:,1) = YUV(:,:,1);               % Y -> Y
YCBCR1(:,:,2) = YUV(:,:,2) / 0.872021;    % U -> Cb
YCBCR1(:,:,3) = YUV(:,:,3) / 1.229951;    % V -> Cr
RGB1 = ycbcr2rgb(YCBCR1);   

注意,如果您使用uint8作为RGB的类型,那么YCBCRYUV也将是uint8,并且转换将是有损的。在我的估计中,RGBRGB1的最大差异是

代码语言:javascript
复制
max(abs(RGB(:)-RGB1(:)))
ans = 
     4

若要进行无损转换,应使用double数据类型。请注意,MATLAB假设对于uint8图像的值在0到255之间,而对于double图像,值在0到1之间,因此它们需要缩放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29248691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档