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

YUV像素和RGB之间的转换

[复制链接]
发表于 2011-5-30 09:56:44 | 显示全部楼层 |阅读模式
RGB转成YUV(RGB to YUV Conversion)
2 F) g( f- F5 ~% RY  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16- j  a0 {9 J4 n; f) w2 x$ i- }# I
Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128  }, n% r7 [+ y0 L
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV转成RGB(YUV to RGB Conversion)) x) C8 {5 ]  S6 c, p$ o
B = 1.164(Y - 16)                   + 2.018(U - 128)5 N. v8 Y4 n1 J% f' y
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128), E# m+ s' t% I0 C0 ^$ e
R = 1.164(Y - 16) + 1.596(V - 128)
. c3 F4 c2 p# }1 y6 A/ |R, G, B, Y , Cr, Cb的取值范围都是[0,255].: J: |0 P( I2 h1 V# `: W
  ^# n! A4 y) T: F. E" G: d
原文:http://www.rosoo.net/a/200604/6049.html: t6 O* F# w) l2 G. z3 g4 {; h
 楼主| 发表于 2011-5-30 17:08:39 | 显示全部楼层

YUY2视频转化RGB格式

//YUY2视频转化RGB格式 by hardy 2007-10-17# T* ^/ V8 Y! z4 q+ x4 ?0 H
//http://www.fourcc.org/fccyvrgb.php
; d- C. t& x0 z9 r- _inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)8 B: _, ?! n' ]
{# F/ D1 s/ J* G7 B
//B = 1.164(Y - 16)         + 2.018(U - 128)
6 g; X2 m9 c/ E/ j//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
1 p) X5 [! ?  X7 o//R = 1.164(Y - 16) + 1.596(V - 128)
6 `+ L4 _3 `! ?9 p, ^6 N! lBYTE *orgRGBbuff = RGBbuff;
" J+ I) |+ R1 r9 n; G* {for(DWORD count=0;count<dwSize;count+=4)' x$ @  d" ~( }+ X
{" d0 t8 K- W( ]: B
//Y0 U0 Y1 V0
+ L3 \* i! K4 p3 m. ~& bfloat Y0 = *YUY2buff;
5 w4 M( F3 Z/ _. L9 g- yfloat U = *(++YUY2buff);! I9 r6 V: C5 F* J
float Y1 = *(++YUY2buff);2 ~$ Y; V, X6 C" {  i
float V = *(++YUY2buff);1 S0 c, r) B* P$ y% O/ ]2 `
++YUY2buff;
" J1 G- P% S- F*(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));           
9 H; b6 h, b9 Q6 @; G: H" F*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
/ q1 D4 W/ f8 n5 c  h- a9 o*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));        ' j1 g. |6 R4 H" S$ J6 `" o0 Q
*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));           
2 J+ ]: ~7 \8 Q0 l! t0 ?0 W*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
4 A, D& f  Z  b+ N*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));         
0 C5 v& z0 ?( t9 W0 j/ t9 t++RGBbuff;7 I- q; D/ e; D+ X# Z% d
}6 B  g; X9 o4 A8 W' J( K
}
; s- E' K1 z7 f+ Pinline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)# b7 l3 i7 ]9 ~- Q
{
& S8 Q+ ~) A( a( H! F3 B6 H2 y//R = Y + 1.14V
' t0 K4 m1 L& m; K! @) ~* e//G = Y - 0.39U - 0.58V
9 i- ~- r- W% Z! s/ {& I//B = Y + 2.03U7 c( ~1 X( V9 \
// R = Y + 1.403V'
; W! A) s4 Q4 F//G = Y - 0.344U' - 0.714V'/ @3 c. E1 I6 [1 g$ Q% B
//B = Y + 1.770U'( ]+ B" a1 j% R5 J7 q* y
BYTE *orgRGBbuff = RGBbuff;
) Z( F  J/ v( Y0 y! n" Ifor(DWORD count=0;count<dwSize;count+=4)
" t4 @( p. h1 H- ~! j5 I0 b2 t{$ f2 m3 j$ {& K4 h  V' c" i! Q; j' ?
//Y0 U0 Y1 V0
, i+ P. N6 y( o. c: lfloat Y0 = *YUY2buff;! w5 Q) K( c( [3 O& p% u' X
float U = *(++YUY2buff);
! U, q) y4 @9 m6 mfloat Y1 = *(++YUY2buff);! f, P2 p% m2 q
float V = *(++YUY2buff);# E; x; m1 E8 P" c# C- G* d
++YUY2buff;
9 D. T) r- p( m; ~" Zfloat R,G,B;
) Y0 B- o5 X5 y  x. _6 v& A+ s; d- b$ e( p/ d& h' F+ B
R = (Y0 + 1.14f*V);
9 U/ ^& g* w& b5 o- o6 K3 d' q+ dG=(Y0 - 0.39f*U-0.58f*V);   ' I, z3 X4 G: a$ p! S. T4 {
B=(Y0 +2.03f*U);
3 i- ^; W* g0 N  `! Xif(R<0) R =0;% B" i7 S8 K( F$ ^
if(R>255) R=255;  ]" _: J$ Q: \1 J
if(G<0) G =0;0 Z8 F* h' f" ~5 I4 J4 s* V: u
if(G>255) G=255;
) Q9 d1 r/ I2 {7 E( |5 sif(B<0) B =0;
- a1 x! d& D* H" F3 U' jif(B>255) B=255;) i2 i) h+ e1 B0 z8 m' V
*(RGBbuff) =     (BYTE)B;         
" N! P$ |" M$ J0 A; A6 i+ K) C& q: e*(++RGBbuff) = (BYTE)G;
$ C) `4 S  y' R& P' G  I; k) w) ~*(++RGBbuff) = (BYTE)R;
3 M% d. K" ^/ r8 T, WR = (Y1 + 1.14f*V); - W2 y0 ~% X" z; f8 U
G=(Y1 - 0.39f*U-0.58f*V);   
* \/ f6 g! v0 P$ \. ?. c% y1 E: Q6 o$ nB=(Y1 +2.03f*U)   ;
* G6 I, H( v5 y! lif(R<0) R =0;
% {% Q* T5 Y. R( Pif(R>255) R=255;
. V  y* v  g4 q. N. a! y( {if(G<0) G =0;; G/ q/ |% B! a# w) D
if(G>255) G=255;
% l! y" S# \4 b7 {- ^if(B<0) B =0;$ n8 a2 ?( |% x; X6 B
if(B>255) B=255;
2 D! i% T& r$ h4 m  f$ b*(++RGBbuff) =     (BYTE)B;         
' N0 w3 f* R% Q$ ^  D# S*(++RGBbuff) = (BYTE)G;
+ z% w8 }* q7 X  f, b& l3 v*(++RGBbuff) = (BYTE)R;# D8 q; C% u0 S7 v5 V* Q
++RGBbuff;
& M7 L+ I1 g" j& n}
' h4 w+ x$ P+ K}
( g! C8 D( Z" o; c0 {inline void YUY2_RGB4(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)7 o& e- s" w- n7 W) Q+ i
{
: U: z4 S! y( j6 }2 C
( }5 @& o" L. `/ @// R = Y + 1.403V'/ V/ E: D2 L' Q/ t
//G = Y - 0.344U' - 0.714V'
+ u2 B5 ?2 @' n7 F3 I& q//B = Y + 1.770U'
3 F0 l0 e% d) V' q9 _3 P. u* ]& j) O- ABYTE *orgRGBbuff = RGBbuff;
& |& k. D3 A2 P4 |. w5 efor(DWORD count=0;count<dwSize;count+=4)/ B. t- N' o: F3 z7 r
{0 g9 j; n9 `2 q) u
//Y0 U0 Y1 V02 U( ?+ Q$ S% M
float Y0 = *YUY2buff;
& C5 D/ Q1 e3 |6 Efloat U = *(++YUY2buff);
$ q! A2 V+ ]; ?* [* r3 lfloat Y1 = *(++YUY2buff);
, k. A% A2 }$ ~; Cfloat V = *(++YUY2buff);2 o8 p; b2 j" c0 ^- ~. R' S9 L
++YUY2buff;7 Y& Q: t/ c0 E3 L# m! L; Q
float R,G,B;" O6 f' U  _8 ?0 w# P- q
  u, T; A& u) V& Q& G
R = (Y0 + 1.403f*V);
- G( S5 f4 V) h8 b) C$ J# {4 TG=(Y0 - 0.344f*U-0.714f*V);   
' F$ X2 j& ^7 W" g% ^B=(Y0 +1.77f*U);
. S$ ~3 X  h3 b) n% n- f5 h: ]+ bif(R<0) R =0;
7 N) J9 \/ A- `9 H3 m8 Bif(R>255) R=255;
: J6 p3 x6 c* f* U: G3 _: a$ P: fif(G<0) G =0;
( Q5 y0 H# C' i, Gif(G>255) G=255;' d$ x+ G5 `7 _; e# `" }
if(B<0) B =0;) |8 k8 y4 I7 c
if(B>255) B=255;
$ a! \$ M" c! F- c- z*(RGBbuff) =     (BYTE)R;          5 E7 r7 p4 R3 |$ Z; X8 c& L
*(++RGBbuff) = (BYTE)G;; M* T. F6 l7 {) h5 Q
*(++RGBbuff) = (BYTE)B;
0 U7 ]# ?9 I! J+ }' h  QR = (Y1 + 1.403f*V); 5 F% p9 h. P( J7 l6 G) ]
G=(Y1 - 0.344f*U-0.714f*V);   1 B3 I0 b* u- e, Q
B=(Y1 +1.77f*U); 7 D$ v% N( d6 ^" ?
if(R<0) R =0;
! I6 A7 T) w' S1 c! o4 K/ p6 l( vif(R>255) R=255;
2 }7 k% O) Q" F# ~if(G<0) G =0;0 V& t# |9 z: G" `/ o( b
if(G>255) G=255;
# m+ q9 W9 M5 J. G5 O  Kif(B<0) B =0;
$ e" z9 {5 q- l& r; g8 pif(B>255) B=255;
- G  ]1 d% H1 W& }( [7 O*(++RGBbuff) =     (BYTE)R;         
3 r4 ~1 _' ^8 D3 U+ s- `. f! _*(++RGBbuff) = (BYTE)G;
! j# {9 t5 y& t8 R. Y*(++RGBbuff) = (BYTE)B;! Z0 k5 p! s) ]$ K6 A- z
++RGBbuff;" Z8 Q( U6 n7 T& i, t: O7 x
}
! k. Y( i* [7 v$ O}
( P( v7 G& T0 Linline void YUY2_RGB3(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
; V/ [/ S& J  }4 K! {+ O9 D$ |{
$ R" H, H* @2 ^0 h: {9 C//B = 1.164(Y - 16)         + 2.018(U - 128)
$ N* o0 @7 Z' a! T0 Y( ^//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)1 |$ W+ P' ~5 s+ S4 _; J3 D
//R = 1.164(Y - 16) + 1.596(V - 128)
2 {* _. g2 G2 n5 \( @BYTE *orgRGBbuff = RGBbuff;% s+ \8 @- O: H: e. d
for(DWORD count=0;count<dwSize;count+=4)& f+ l$ c! u  b5 g6 S# B
{
7 O* c* ~- X( f//Y0 U0 Y1 V0( [, t" N/ q- K$ k1 G
float Y0 = *YUY2buff;
# A" `" C1 U$ p4 g/ {+ \/ N0 g" Vfloat U = *(++YUY2buff);! e- a7 {6 t8 ^2 \, ^
float Y1 = *(++YUY2buff);( j" x$ E6 K7 F# B0 T
float V = *(++YUY2buff);& |* k( m$ Q6 O1 R  o
++YUY2buff;0 m  e9 {' F1 v% s
*(RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           
$ h8 G" d8 b$ Y*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   2 w0 V* H; j, x, t1 I" e
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));        6 o5 G  O+ Q+ |$ Y6 l
*(++RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           
8 V: y" X# V7 v! A, d, f2 Y% H*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   
, ^" o5 v& d1 Y3 c9 d" J1 c! b*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));         
% n6 g/ @9 c) s4 b++RGBbuff;. u8 k9 q/ `( N/ p2 q1 X% h- Y
( u8 p! r7 r6 {( u! f7 x
}
; U1 s2 C3 n' a$ R. [$ L* b5 d6 T! [; Q}
, H/ Q# F5 V) E- k" v5 }  F// http://msdn2.microsoft.com/en-us/library/ms893078.aspx& m- Z- P& f$ I7 e
void VC4000Graber::YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
, ?; p0 ?; m7 E( e{' Y& s% a+ P0 x+ T8 K
//
5 z8 C; o7 V! r* k5 U//C = Y - 16- i; e& m9 h+ N  p2 J' U* i/ E
//D = U - 128
; ?% a! m5 N$ T: l0 G//E = V - 128
$ t  B) Q$ @! R8 I4 D//R = clip(( 298 * C           + 409 * E + 128) >> 8)
3 u( X0 x* P* D+ f' I5 y, u5 d4 P' S//G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
# Z! z5 S% b! i//B = clip(( 298 * C + 516 * D           + 128) >> 8)4 l6 ^1 T* d1 q
BYTE *orgRGBbuff = RGBbuff;
4 p' m1 \$ _/ l+ z, N. hfor(DWORD count=0;count<dwSize;count+=4)2 U2 f$ G3 D# v. d& \0 f# w
{- \* a' g$ [$ |- Q
//Y0 U0 Y1 V0' F9 Z, q% X$ i& Z* V( ^8 [% j
BYTE Y0 = *YUY2buff;8 F; v" E% F' g6 r
BYTE U = *(++YUY2buff);
1 @  @! A) ~9 X0 m/ }BYTE Y1 = *(++YUY2buff);& G' B) |$ Z, [
BYTE V = *(++YUY2buff);2 G$ K- d% z* b. _
++YUY2buff;
6 Q: o3 e$ l" X; g9 ^* m8 o% \LONG Y,C,D,E;
5 y1 I4 Q3 `& Z! k& ^$ T5 OBYTE R,G,B;6 F6 }& M& f3 t; o/ N; \' S  u2 q

9 O3 a. x0 h/ `* pY = Y0;
1 F) y: O2 M0 D6 b, d; v" N4 }9 LC = Y-16;) r- g" U- e( Q) a6 ^+ c5 t4 j
D = U-128;
7 o6 Z0 @/ n# _+ G! q% kE = V-128;
  m$ J; E% I! y3 o3 D( z- pR = clip255(( 298 * C           + 409 * E + 128) >> 8);: z4 _* |; u7 T5 q) Q% d% }& v
G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);' L4 m' _  t, g) h8 t
B = clip255(( 298 * C + 516 * D           + 128) >> 8);
1 j$ O4 t- `" s' N3 b' `*(RGBbuff) =   B;           
8 j: e4 I# y5 O6 }*(++RGBbuff) = G;   
" B6 Z7 z6 D% ~* R$ K+ z*(++RGBbuff) = R;        0 u2 r$ V, t2 n9 B+ e
Y = Y1;; K9 j- \! e5 O) z& f
C = Y-16;% M, i8 A# }4 E( ?
D = U-128;
/ I1 ?5 k# e3 c/ _! I2 {6 BE = V-128;
& I; H: e% q9 M$ B, N( ]3 m% OR = clip255(( 298 * C           + 409 * E + 128) >> 8);! F# K! H3 E6 W. D, |( ?
G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
/ c2 u8 v9 c6 p( XB = clip255(( 298 * C + 516 * D           + 128) >> 8);
- j$ e3 f; X( |& U% X1 n7 ]*(++RGBbuff) =   B;           
( r& I* G* h/ \*(++RGBbuff) = G;   7 s3 L( u- P* n
*(++RGBbuff) = R;         ; j  F8 v' ~. o+ j5 j" o
++RGBbuff;
1 t5 f9 E5 _8 |% |4 U2 E" R9 w0 \8 |, O% O, q
}: \7 J& l/ T/ V( ^9 ^2 J
}( J- X2 S6 G9 T* v, O) V
BYTE VC4000Graber::clip255(LONG v)  P8 S" [4 L' m4 z( q
{, x6 I, H0 Q: q: a1 t* h
if(v<0) v=0;
! p! P8 Q% ]4 Felse if(v>255) v=255;+ J" w' J+ [) V: E
return (BYTE)v;4 |3 m5 U" o4 b+ P" j3 S* ^# H/ s/ Q
}5 d' I2 h- u% M

( P2 I% O/ }- F$ f本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/10/18/1831810.aspx' g5 w# q1 X# Y, k( w1 X
! @9 O! P/ M; |: i7 s, A% o( i
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 07:58 , Processed in 0.018176 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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