找回密码
 注册
搜索
查看: 4488|回复: 1

YUV像素和RGB之间的转换

[复制链接]
发表于 2011-5-30 09:56:44 | 显示全部楼层 |阅读模式
RGB转成YUV(RGB to YUV Conversion)9 B; g* ]7 w# t; m
Y  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
4 s0 R* A- _  ^$ W" M) ZCr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
. ~3 `  Y4 I: a2 ~Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV转成RGB(YUV to RGB Conversion)6 y4 c5 z) t4 ]
B = 1.164(Y - 16)                   + 2.018(U - 128)- _$ ]0 j4 r( e2 K  t- O+ M
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
4 w' y( R: A  s# e( b2 O( E" FR = 1.164(Y - 16) + 1.596(V - 128)
. r3 a0 P# p8 W4 o* p6 U9 NR, G, B, Y , Cr, Cb的取值范围都是[0,255].' ~' n, Y) N& H
" U6 F1 Z- ^0 n+ o
原文:http://www.rosoo.net/a/200604/6049.html
' ~/ ^+ `- K0 D7 y& _
 楼主| 发表于 2011-5-30 17:08:39 | 显示全部楼层

YUY2视频转化RGB格式

//YUY2视频转化RGB格式 by hardy 2007-10-178 |6 e" N2 _% L* r8 n1 u
//http://www.fourcc.org/fccyvrgb.php" @* B3 |8 ?. a5 J
inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)4 C' m3 j% p* F0 D* k- |
{
6 e( s3 {& R4 t3 `$ V' M: q//B = 1.164(Y - 16)         + 2.018(U - 128)9 D+ ?7 j3 _3 i1 Q  n
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
# \2 o( P+ \1 r% n//R = 1.164(Y - 16) + 1.596(V - 128); B- w0 y; r- X8 n& e( r# p
BYTE *orgRGBbuff = RGBbuff;
$ @- n6 o3 W" nfor(DWORD count=0;count<dwSize;count+=4)
1 g; V7 s9 q- L. ]2 h/ f, ?{4 k- D) H; s; O- I7 h: |
//Y0 U0 Y1 V0, [# l8 _4 K) c/ i/ [2 |7 F
float Y0 = *YUY2buff;
! m' p2 P; N; D. G2 Y& yfloat U = *(++YUY2buff);8 K" v8 B+ {2 s2 X, T" l( O
float Y1 = *(++YUY2buff);
, \7 c" E; Q2 B9 X8 o6 Wfloat V = *(++YUY2buff);
: |( m- ~" r! v4 m! |++YUY2buff;0 m! a0 Z$ Y2 e/ c
*(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));           5 W+ ?& _- K# V2 w5 e% I4 [& _
*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   8 [& {: N, w  c! j7 O3 e1 \
*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));        
+ q* _& W4 W4 ~3 a- z*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));           & D- F" P. m5 C+ |) |
*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
1 }4 R* p' A) O& ^' t. J% m  m! A*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));         . B9 e. ]: n3 Q4 }2 b& \
++RGBbuff;
2 H0 Q+ u, K: \7 }% s}/ ?. _5 |0 O+ o# ~
}" Q6 L9 t- _+ n# ]2 r
inline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
, Y2 _7 l! O* I0 `1 Z2 h# F2 S. S{" g9 i$ K9 h) k! ]
//R = Y + 1.14V
+ c  O+ O& h. K0 c, s7 |; K//G = Y - 0.39U - 0.58V1 c3 w  i4 E3 {! M7 \9 n% M) T; P
//B = Y + 2.03U
% F8 H+ N: N6 q2 Z8 ^4 f// R = Y + 1.403V'
4 b5 |/ Z' j! P* J4 T//G = Y - 0.344U' - 0.714V'
5 J  b- [- c& l9 B5 i+ w" I//B = Y + 1.770U'
  g2 k  D& D7 a% g; PBYTE *orgRGBbuff = RGBbuff;+ B7 j% s  J5 c/ h0 n
for(DWORD count=0;count<dwSize;count+=4)
% k2 f1 [1 a' X: i' M1 |' S{
% P4 w6 w/ [, `& p' [) Y4 `//Y0 U0 Y1 V0: Z6 I$ ]) v5 B& H: ?
float Y0 = *YUY2buff;
0 H- o% ]" J  v$ f2 u3 |$ Ofloat U = *(++YUY2buff);
1 ?8 t9 E/ N! c* d9 W+ Q1 p' ifloat Y1 = *(++YUY2buff);
# k/ C; q; |8 |5 i/ n, r  X5 A7 h) ifloat V = *(++YUY2buff);
  T# ~; U5 E. ^+ P* L5 O++YUY2buff;
* I7 w9 P: c2 p! Ufloat R,G,B;
# x. s, u0 z- `7 l# [, T) i% W8 ?- P% R: K$ z
R = (Y0 + 1.14f*V);
5 v! ~* S8 V! Y9 G+ OG=(Y0 - 0.39f*U-0.58f*V);   % b# N4 U+ O' Q
B=(Y0 +2.03f*U);
& n6 _/ ^" X- y) }5 V$ r* gif(R<0) R =0;6 F0 q/ j. j. o- h3 O4 s( y5 ]
if(R>255) R=255;3 d3 i' w. q+ Z9 `, f  A" n0 ?
if(G<0) G =0;) U) y; y: w" \: [, D/ G2 a% X: C% Y
if(G>255) G=255;
6 R8 g# O- }  c% R1 qif(B<0) B =0;
" `: r  x* g: z# R6 f1 u. U. I+ Sif(B>255) B=255;; Y3 r3 I4 O# `: h6 M9 Z
*(RGBbuff) =     (BYTE)B;         
, I& P* A* y& Z*(++RGBbuff) = (BYTE)G;& S" [; G  o$ U+ j5 Q* B
*(++RGBbuff) = (BYTE)R;
7 h9 W6 w! z" O7 {5 X: AR = (Y1 + 1.14f*V);
6 K6 W( q1 F4 r" i4 D+ e4 LG=(Y1 - 0.39f*U-0.58f*V);   " u/ l  z5 r0 k/ A# Z9 t5 m# I
B=(Y1 +2.03f*U)   ;
; r6 L1 f6 i8 }6 y) gif(R<0) R =0;
: z, V( s( q# l  K9 Yif(R>255) R=255;
6 g$ ^& y0 `! y8 z' {7 }( uif(G<0) G =0;, o! ]; c7 k/ |" Y$ [
if(G>255) G=255;
0 M4 |  b+ M3 [: Y$ H+ ?& \" ~if(B<0) B =0;. g8 o* b, v' F" ?: v0 b0 R
if(B>255) B=255;
8 R  N" j$ V0 ?9 d+ }*(++RGBbuff) =     (BYTE)B;          ) ~# F! X# v. ]: w6 G9 i/ `( E4 k4 [$ u7 ~
*(++RGBbuff) = (BYTE)G;
! [+ |; H  B1 c) B6 `1 e*(++RGBbuff) = (BYTE)R;
- @3 j' U& \* s) u++RGBbuff;
. e/ z! Z7 z$ i/ P+ i/ s}
4 R! h" R0 \4 `5 L4 }}0 |7 r. a2 |2 `: r
inline void YUY2_RGB4(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
; Y& [+ c. y) ~# k& y' V# A, x{
% E  f- ^* q: B! w, K. t3 f( m% p2 _
// R = Y + 1.403V', k) _" o1 X' t6 G7 r* ~
//G = Y - 0.344U' - 0.714V'' Z7 K0 Q( m' D
//B = Y + 1.770U'6 ^% f; `" p+ Z  L
BYTE *orgRGBbuff = RGBbuff;
) v) j& s) g; K2 G) P3 q5 T: e% ofor(DWORD count=0;count<dwSize;count+=4)
: x/ h* @/ {1 k! i/ h* p{6 N7 D, f3 y" {+ y( U
//Y0 U0 Y1 V0
$ [  o  T; w% X% U6 hfloat Y0 = *YUY2buff;
0 @/ K! s- G. a( J( i  x' Yfloat U = *(++YUY2buff);
( _$ f+ I4 j- \7 q" Nfloat Y1 = *(++YUY2buff);
& Z) _: N$ B2 T' n- bfloat V = *(++YUY2buff);
( c: Y; s3 r5 }' `1 @/ X. Q++YUY2buff;
( f# x  S- L. j; R5 n5 @float R,G,B;- A  U. f& C4 N
) \/ u6 \# B& Q0 h5 I5 L; q& [
R = (Y0 + 1.403f*V); # L9 K/ z2 u' A3 L. m& Y( G; ~
G=(Y0 - 0.344f*U-0.714f*V);   1 R3 I1 ^3 |9 F$ ?
B=(Y0 +1.77f*U);
6 ]! t$ K% z7 {! h7 nif(R<0) R =0;. _1 q, }0 R4 ?) S7 D# s
if(R>255) R=255;3 ~5 {+ |! |) K
if(G<0) G =0;
: G( w2 d4 l$ l4 {$ x7 j. n7 x! Rif(G>255) G=255;
' `" v5 |# H4 k6 F  Mif(B<0) B =0;
0 {5 `) s' q2 `if(B>255) B=255;
/ P. _& M' T/ |/ l5 O5 ]*(RGBbuff) =     (BYTE)R;          0 O0 \% K- {" b4 W) B! @. H
*(++RGBbuff) = (BYTE)G;2 {- X" z5 |( ]0 N! T& n; b# [. i
*(++RGBbuff) = (BYTE)B;0 b& S. [! u: N$ {
R = (Y1 + 1.403f*V); ( ^- T$ ?6 N$ k% A
G=(Y1 - 0.344f*U-0.714f*V);   
* p8 ?3 _2 N' \B=(Y1 +1.77f*U);
8 S  n& K% O" t* s% {3 vif(R<0) R =0;
$ }  m( j0 d9 `7 f/ d8 I3 ~" U6 pif(R>255) R=255;
3 I( j0 F; Z2 t; B6 M* A) \if(G<0) G =0;  m3 b1 t9 I) s' D% w# L
if(G>255) G=255;* u2 I( @4 P5 O- o, q
if(B<0) B =0;
* a" m! {' h/ nif(B>255) B=255;
; d+ _: Y% I' m# Q7 M7 w*(++RGBbuff) =     (BYTE)R;          3 c6 h  O8 s/ `# {: N' ?* C
*(++RGBbuff) = (BYTE)G;
& @8 [! ?. w# J; a  b*(++RGBbuff) = (BYTE)B;
1 z" H. a6 C4 J5 R8 Q. P++RGBbuff;
5 ]+ s$ U# e: n+ A$ t; d. ^}6 H! n/ G, U8 z% o$ W7 Z* S  F
}
  v: Z* K5 K+ t! j* h! Ainline void YUY2_RGB3(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
9 b: L4 j# X8 [: {; L{: E6 D/ _' e: n/ y. \0 o8 e4 x
//B = 1.164(Y - 16)         + 2.018(U - 128); E( c  z1 Q. P" y3 y+ h1 v
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)) K0 D+ T6 T' m
//R = 1.164(Y - 16) + 1.596(V - 128), @3 Y# j7 d  E# U; y2 c8 b
BYTE *orgRGBbuff = RGBbuff;$ \6 D5 M7 [, A. |( L- i+ |
for(DWORD count=0;count<dwSize;count+=4)0 M) p, _; `8 w
{
' L( o' x' @! o4 Z2 T" s7 z//Y0 U0 Y1 V0
8 G$ j$ J9 l' w" _float Y0 = *YUY2buff;5 f  G: m4 `2 S$ q+ t2 \4 @
float U = *(++YUY2buff);
/ {- ?: t5 c2 B  b6 g) W! T7 qfloat Y1 = *(++YUY2buff);
1 H0 ]: r& ^$ k. q" T8 ?) Zfloat V = *(++YUY2buff);
* \/ D+ D0 u* n9 H" T1 v* U++YUY2buff;
( v3 Y/ K7 l1 \4 y& A*(RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           * y4 q( V" v8 @: V
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));     E* T0 F, c8 o: ?
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));        2 N# s5 [+ i7 t* u2 `# a# _
*(++RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           : K+ g) U6 b; X9 R: ^9 j3 ^
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   
" u" g% @4 ~/ k; E*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));          2 D( v5 h" y; ~
++RGBbuff;: M! q) O0 i4 Q/ V7 u

9 S/ v$ c9 e; ?& j# ^}8 f% E. a8 b" x/ p
}) Y& p! H5 ]3 z# x' S7 [$ u/ d
// http://msdn2.microsoft.com/en-us/library/ms893078.aspx" r  P+ \- h8 L6 O
void VC4000Graber::YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)7 [) Y: H- \- t: z. l' @
{
; w0 L) N0 d9 ^( Q1 |- W  p3 \//6 k# g3 X2 X0 d4 ^: I: e
//C = Y - 16- g3 X( w0 I0 x# b- H: E
//D = U - 128( G/ p9 P$ a# o
//E = V - 1288 |5 v: r, C5 n( k4 s* p% Y( w
//R = clip(( 298 * C           + 409 * E + 128) >> 8)
  `2 V0 E# v4 F! T//G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8); q/ ^$ p/ z% v! t
//B = clip(( 298 * C + 516 * D           + 128) >> 8)
' j. o. T3 s7 E- ^: F+ N, CBYTE *orgRGBbuff = RGBbuff;
  E* W& v& S- f) Y  }* Cfor(DWORD count=0;count<dwSize;count+=4)3 E* R% K# Y7 g6 t6 a- V2 p: r
{
8 S+ r& U7 T$ B$ K& [3 Z+ `0 M$ ]8 T//Y0 U0 Y1 V0# C$ u6 S- x' D; o6 A
BYTE Y0 = *YUY2buff;
/ K- |% c6 @! ^5 Q9 I9 o8 CBYTE U = *(++YUY2buff);
5 d  x* Y7 M5 L5 GBYTE Y1 = *(++YUY2buff);
- T3 j* ?* j( w) [: rBYTE V = *(++YUY2buff);
* _$ Y$ w$ M9 S" g++YUY2buff;
0 \9 K8 ~! h0 ILONG Y,C,D,E;0 `' E9 s3 l# A$ d* j
BYTE R,G,B;
9 |' |+ y9 y  Y  I7 L
5 I7 ~# C" G- U' \1 {Y = Y0;
# f& c! N3 H1 V) G9 R. R( E! CC = Y-16;
7 b; u% K  \1 k- D, L3 `D = U-128;& E: Y; Y, }, c( }$ m5 d: z
E = V-128;$ q; s; }4 ~  j/ T+ H# p
R = clip255(( 298 * C           + 409 * E + 128) >> 8);
1 T; e& @: D# p6 n( p& j% EG = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
  o1 i0 x' y$ S) p$ A6 A' NB = clip255(( 298 * C + 516 * D           + 128) >> 8);
; J# {  @5 v. b7 C*(RGBbuff) =   B;           
" d: N3 _+ s) k) f. g9 G  a*(++RGBbuff) = G;   
! {& N# O4 L6 Z*(++RGBbuff) = R;        
$ D5 f5 X2 m* e+ u" `Y = Y1;
* ~( Y! h% s# R2 ?0 j6 ~5 b$ o  JC = Y-16;* q& n/ ]+ K6 q+ M- S
D = U-128;
' V2 l1 c8 d9 nE = V-128;, u1 z) E: `2 @
R = clip255(( 298 * C           + 409 * E + 128) >> 8);
( \; M  v0 t2 m  ^8 FG = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);" Q$ f6 B7 K! z- J6 G6 D
B = clip255(( 298 * C + 516 * D           + 128) >> 8);
4 T7 ~/ Z! p: ~*(++RGBbuff) =   B;           - D+ k1 H4 M- y1 ?" L7 c
*(++RGBbuff) = G;   % c) n0 R8 r6 s9 H  J' @
*(++RGBbuff) = R;         & ?5 L! ~$ w+ p
++RGBbuff;
# R; v! M1 u* U8 J4 c
6 t0 f, K+ b: o7 x* J( w9 X+ k}
( X0 P+ f2 Q$ o" `5 `5 t9 W}# H$ o8 G: T! p9 J
BYTE VC4000Graber::clip255(LONG v)
4 `% g7 o, B: T. y7 V. Y{
% k1 P- l( i7 y0 H' aif(v<0) v=0;
8 R& {- s! N( Melse if(v>255) v=255;) e  ~. b. M, z" E- X9 X/ B  x# f- M/ ^$ y
return (BYTE)v;! Z1 K9 A4 l$ u, ^3 X! F) S' V; C3 \
}+ ?' }8 h. e- H/ ?
' l6 B0 U6 K3 b& |" y+ X$ A8 I
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/10/18/1831810.aspx/ c7 I' \5 m/ W9 K& w+ ?9 o
& o* c: Z9 h7 u0 k# x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-5-2 07:41 , Processed in 0.017906 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表