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

YUV像素和RGB之间的转换

[复制链接]
发表于 2011-5-30 09:56:44 | 显示全部楼层 |阅读模式
RGB转成YUV(RGB to YUV Conversion)
& F0 G$ m2 [2 m9 oY  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16% u3 s0 F' m: E: P$ B
Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 1284 p; {4 s7 L4 k7 \9 G
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV转成RGB(YUV to RGB Conversion)7 G0 _; w* i" ]) ?8 P
B = 1.164(Y - 16)                   + 2.018(U - 128)
( M. B8 V; x+ n- L0 b2 [& AG = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)8 V2 f8 j6 h% r# ^% W" T) U
R = 1.164(Y - 16) + 1.596(V - 128)
5 T/ s# h) _% b& T+ g; mR, G, B, Y , Cr, Cb的取值范围都是[0,255].! o# f4 h) C6 N4 [7 u
& K3 v; l/ ]/ O5 Z
原文:http://www.rosoo.net/a/200604/6049.html
3 Y  X( H5 L; K# _9 p$ p0 |
 楼主| 发表于 2011-5-30 17:08:39 | 显示全部楼层

YUY2视频转化RGB格式

//YUY2视频转化RGB格式 by hardy 2007-10-17' q7 x/ n. I; t6 t
//http://www.fourcc.org/fccyvrgb.php" q6 ~8 c: e$ P8 Z
inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)7 Y5 M4 _0 m9 a9 E
{0 y+ F$ J. p) X: ~9 m1 ?$ T, J" D/ _
//B = 1.164(Y - 16)         + 2.018(U - 128)
( w# v  k+ U9 e  A* q$ P% }//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
9 n  s1 |$ G$ p3 x//R = 1.164(Y - 16) + 1.596(V - 128)3 o9 m. \$ k4 s: u9 q
BYTE *orgRGBbuff = RGBbuff;) M5 P5 T1 k# W' C( Y2 N9 w! Q
for(DWORD count=0;count<dwSize;count+=4)7 F9 Z7 p( x* J2 U( x0 X  `" U
{
' z! a  e* W1 R" M( I# m//Y0 U0 Y1 V0
8 s0 A. X! @6 {% R* f/ efloat Y0 = *YUY2buff;) b' D- A. ^" v2 u% d0 A  @4 N
float U = *(++YUY2buff);6 q% M& k6 N. x5 M- e# ^
float Y1 = *(++YUY2buff);' o5 p% d' U! r  _0 a0 V" b
float V = *(++YUY2buff);0 c2 P3 c' B. m( G
++YUY2buff;
) P2 a( X+ f4 [. P. M) B8 m' P*(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));           , z; c1 g3 d! i% O6 b" l! o
*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   , i/ w3 L4 V, `4 ]4 y: s
*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));        9 G6 g+ a# a3 Q6 d
*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));           
# l% S: p  \; T0 }*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
; ?6 J. S3 o& T*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));         ! |! e) a4 A# c6 W) \
++RGBbuff;
4 l6 w( c8 O0 `8 c}
3 ^% p  m. G& s7 H$ [}
8 X: i2 |8 h8 ]9 k% iinline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
% Y8 ^5 W$ J5 M; G, H{
% N4 w: I& |1 Q//R = Y + 1.14V
/ q3 l# \% m/ w1 Y' w( K0 ?, V0 Y, N//G = Y - 0.39U - 0.58V
; d1 A3 F9 V* b" m//B = Y + 2.03U
/ X3 {3 \* Z8 E; w6 n7 ~4 ?// R = Y + 1.403V'
* Z/ Z& H' m# \3 T6 o//G = Y - 0.344U' - 0.714V'# N& J: [$ _6 ^/ c
//B = Y + 1.770U'
& l& H, H' W$ YBYTE *orgRGBbuff = RGBbuff;5 A; v+ m0 X# p/ Y& Y' W
for(DWORD count=0;count<dwSize;count+=4)7 c/ Q8 B$ x7 j
{
3 q1 P7 E) }0 P//Y0 U0 Y1 V07 l& l. z' V/ L2 @7 K! F( b
float Y0 = *YUY2buff;8 i/ n; i+ ~& O1 ~
float U = *(++YUY2buff);
6 g3 f% C3 c! @: n, `9 @0 Nfloat Y1 = *(++YUY2buff);
, T! A5 h+ {# cfloat V = *(++YUY2buff);
3 Q) {+ ^' B1 V# l5 `++YUY2buff;- X0 Q7 d  i. ~( r8 ~: W
float R,G,B;- I- [2 L7 S0 o* C' v  [

/ X  A( E9 j( M5 z) u6 J& gR = (Y0 + 1.14f*V);
* H" Y. Z, T. P; Z: B& C. v; T$ vG=(Y0 - 0.39f*U-0.58f*V);   
$ E3 w! z1 T  K5 p. [B=(Y0 +2.03f*U); * {0 X5 @: R9 U7 {( |& [3 `8 E
if(R<0) R =0;. y! O7 q; R' n( Q, k
if(R>255) R=255;0 k: I3 b  s) v. [9 S% w
if(G<0) G =0;# g( j( r# O4 x6 M( ^
if(G>255) G=255;
) c. Q5 e/ T8 _* U/ mif(B<0) B =0;
6 C7 j2 J& n  _; Iif(B>255) B=255;
/ U& T* S! {1 n: z0 f/ i2 O*(RGBbuff) =     (BYTE)B;         
- C4 U: |2 q' g, ]1 N*(++RGBbuff) = (BYTE)G;
* q3 v& q$ d) o; H*(++RGBbuff) = (BYTE)R;
2 ]6 P' @2 ]) q2 h5 |  [R = (Y1 + 1.14f*V); ; I6 F: d$ i5 d
G=(Y1 - 0.39f*U-0.58f*V);   
! t8 N- j; Q( A7 k$ _B=(Y1 +2.03f*U)   ;
5 T% a+ F2 Y; V3 ~* Oif(R<0) R =0;
) C5 K7 M. |! ^- kif(R>255) R=255;
  L! F7 k) D7 p: ~  `if(G<0) G =0;/ j' d* {* o( ?2 f; N$ t* c9 a# W
if(G>255) G=255;' N5 n) s( d4 v, [. M6 p+ a. C
if(B<0) B =0;: O! t8 F, y  y- c" h
if(B>255) B=255;
- K2 J8 o4 x2 {9 U0 R# a* j*(++RGBbuff) =     (BYTE)B;          6 q  v/ X9 f" a( \
*(++RGBbuff) = (BYTE)G;
- B$ z# c' b+ Q*(++RGBbuff) = (BYTE)R;( o. M% V) L9 ~
++RGBbuff;
. y( {/ R, V1 J, y8 c}# R7 l5 l; m( h" v4 V) P4 [
}8 a3 L6 V- U; E% w3 N
inline void YUY2_RGB4(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
+ ~. \  c, f: `; h* z{  J( `! J) u" n! d- z: G) \2 @

* K& D, u1 S& X( G( l! s% R% {1 t// R = Y + 1.403V'
  N% N4 u5 U. Y& U2 Q; r//G = Y - 0.344U' - 0.714V'% d) n) e& {' s
//B = Y + 1.770U', a3 o" k) A( I9 q/ E9 s
BYTE *orgRGBbuff = RGBbuff;
/ u" r6 I" Q% s4 y2 x# |, }) K. H& Lfor(DWORD count=0;count<dwSize;count+=4)
- ~! \4 c+ }8 E2 n1 ~( w9 l- C0 w2 @{
8 a' _- Y: d7 m- _, S2 w  X; h//Y0 U0 Y1 V03 y: \' ?" a* Y- t9 `( V
float Y0 = *YUY2buff;, F! [, y( u, @. v: h- h7 n3 v
float U = *(++YUY2buff);# V( L! L5 m$ d" A
float Y1 = *(++YUY2buff);) n3 o7 f4 l$ f: q3 W, o4 }$ ~: k
float V = *(++YUY2buff);
6 w7 |  V9 V% g) D++YUY2buff;
( V8 s; m( }3 x( jfloat R,G,B;/ K6 h1 V% @" M# \2 v" Q8 `4 l2 S
1 Z# Z5 ?9 w9 M& s: g
R = (Y0 + 1.403f*V);
0 _7 q& u7 E# a+ [) n- LG=(Y0 - 0.344f*U-0.714f*V);   
9 t# I' F) i' p! E7 @! HB=(Y0 +1.77f*U); ! a+ v0 s) L& v* {9 l5 t& ]  [2 s$ G
if(R<0) R =0;
3 h. J! s  }) y5 }( b! ?if(R>255) R=255;- r, a0 e; Z. q- T* f: c
if(G<0) G =0;) l/ z5 U; H6 e: _5 Q: l
if(G>255) G=255;! m5 |9 h# \$ u) V- w& ]  r1 H) i
if(B<0) B =0;
: N- O; T- T3 ?( i# {" o6 A9 Z, K+ l; hif(B>255) B=255;! f  w, E% F& X4 R: L: Q6 I
*(RGBbuff) =     (BYTE)R;         
0 P) c- c) Z+ E6 H' Q9 K+ K*(++RGBbuff) = (BYTE)G;3 G0 R5 B4 G$ ?: r
*(++RGBbuff) = (BYTE)B;# d! q1 r1 w, i2 a$ H: q; {* M( T% [
R = (Y1 + 1.403f*V);
4 f+ P" b- ^: M) XG=(Y1 - 0.344f*U-0.714f*V);   - \% o4 E- Y2 J; _9 x
B=(Y1 +1.77f*U); 0 E8 A5 m2 i9 p" t
if(R<0) R =0;
# e- _! D2 ?! r" i& I4 \6 [: gif(R>255) R=255;- L4 P! h; T, V# K2 F! Q. f/ Y& k
if(G<0) G =0;
( m% ~9 e( R2 _( W- Zif(G>255) G=255;6 N: q- M2 i) v0 d6 }
if(B<0) B =0;
/ a# ]4 h& {) @$ N4 J& z0 U) Iif(B>255) B=255;9 Q* R7 s+ J- `, d4 A- u6 u
*(++RGBbuff) =     (BYTE)R;          1 O5 }# a! L# @/ _7 D
*(++RGBbuff) = (BYTE)G;
5 {$ O* o7 m* _# I; A, T*(++RGBbuff) = (BYTE)B;
" u2 _) M+ j$ c) A9 l2 K++RGBbuff;
7 I3 D) U4 ~  f6 L+ h! `}
  f; W3 P! d! y' d1 }4 B0 _8 L}* N& K- w. n' v
inline void YUY2_RGB3(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)6 z) G8 M" Z1 |' T
{7 e8 ?/ K8 ^  {- ~( {
//B = 1.164(Y - 16)         + 2.018(U - 128)
3 A4 u1 m" P- W9 K, A% @//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)* b; u4 A5 K# ?
//R = 1.164(Y - 16) + 1.596(V - 128)
! M* N: P+ T  bBYTE *orgRGBbuff = RGBbuff;
1 Y# W8 t5 x  _4 _& d% B+ qfor(DWORD count=0;count<dwSize;count+=4)
' h) r! u+ y/ k1 {! ^6 R: E/ ^{
4 Q$ B. v; `; {( D) }3 B//Y0 U0 Y1 V0
( m. |* e" C) P8 rfloat Y0 = *YUY2buff;+ w1 Q- X9 s  |' m4 _
float U = *(++YUY2buff);
; m+ H7 Y4 f, y1 B$ Hfloat Y1 = *(++YUY2buff);
3 U! ?/ ~8 |3 y( k# O& Cfloat V = *(++YUY2buff);
- [2 J" `. p6 S: E8 I% S% h# N++YUY2buff;- Y  E0 z- z' T; b5 r% S  j# [; u
*(RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           
0 ?; [- f6 m0 d*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   
; s. W: J3 Z2 l7 y( i! w*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));        
* g, }; Q& b# g' ]6 D3 W*(++RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           & F, _: r9 T0 C2 Z& H1 J9 [
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   & m# M; ~8 y2 P7 R
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));         
" Y) ^1 ?, q  Z) J# K++RGBbuff;; z* H1 x" _6 b: D3 m% [# ^

6 W4 g5 b$ k8 ]" g# r* V# K}
% W" U) s0 l- _) @4 l% o}$ k* P2 E9 R5 W
// http://msdn2.microsoft.com/en-us/library/ms893078.aspx
, h* ]5 t7 l6 H7 G: wvoid VC4000Graber::YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)% F2 g/ U& C4 U/ f" |3 r7 a
{6 h( p% F9 y! [5 f
//1 }' w4 R! A) I6 b& [
//C = Y - 16/ l* C5 l2 ]. B) N3 G
//D = U - 128
4 T6 I/ \8 n5 t1 g//E = V - 128
) w' X) F- ~+ K  m% {//R = clip(( 298 * C           + 409 * E + 128) >> 8)
3 o' H$ I8 N4 M//G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
+ K) C+ ]) R. c- e7 ]//B = clip(( 298 * C + 516 * D           + 128) >> 8)
4 D. i8 Z$ w/ x6 gBYTE *orgRGBbuff = RGBbuff;
9 W7 T) V, H7 u" Qfor(DWORD count=0;count<dwSize;count+=4)
2 z; |1 ?! E8 t+ y! U* |{
/ s8 W. F' ^) t5 J) _( h//Y0 U0 Y1 V0
0 j0 r; {5 Y8 J/ N: y6 L& {7 S. EBYTE Y0 = *YUY2buff;
! @3 H3 r7 q* y6 |- c  `BYTE U = *(++YUY2buff);" k- ]4 @3 s% M! _4 p7 s
BYTE Y1 = *(++YUY2buff);
: L- p+ K9 S+ P% _BYTE V = *(++YUY2buff);6 w$ ], Q# Q3 @& l
++YUY2buff;
' w3 Q. h5 L* e* ^0 DLONG Y,C,D,E;8 W0 B8 g( B3 Y4 g8 \' y7 L2 O
BYTE R,G,B;
2 [% L- }) p) ?0 W  e7 S* y
- R' Y/ Q( E" {4 U5 o% x: QY = Y0;4 i$ t4 ~: j; R3 n5 v- a# _
C = Y-16;
6 Z1 o; c  s1 T, j2 [( q( dD = U-128;" h, H& Y1 m+ \4 Z/ }1 H; s& J
E = V-128;
* y/ ?3 x/ d  Z- R" `) xR = clip255(( 298 * C           + 409 * E + 128) >> 8);
8 W4 M+ `1 n; X0 j' ]( hG = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
+ l. \/ v" U6 X) k6 m# v4 b  R  S* nB = clip255(( 298 * C + 516 * D           + 128) >> 8);
. U7 B( p/ p" Z*(RGBbuff) =   B;           
; Q3 D7 t2 B" Y5 S6 f*(++RGBbuff) = G;   ' Z8 K3 x1 {& [
*(++RGBbuff) = R;        ' _! w! J6 H2 ?4 D/ Z. N7 P
Y = Y1;
1 A3 `, T: l8 x! ]9 i! HC = Y-16;9 R/ i7 X8 T+ T3 T3 T, z3 N# o9 L" O
D = U-128;
* G. \5 a4 E# x2 P1 J! n3 cE = V-128;
% z) q) |4 \5 f% e- wR = clip255(( 298 * C           + 409 * E + 128) >> 8);
# Q! [+ j# D0 s. R' cG = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
# Q% g" X9 R/ x$ w: IB = clip255(( 298 * C + 516 * D           + 128) >> 8);% u0 p2 n6 ~% k0 g. h2 N3 C; {
*(++RGBbuff) =   B;           
" L) ?& Z6 S) A8 D5 d" N*(++RGBbuff) = G;   
- V; R" V# A0 @1 t* r9 P+ x* K*(++RGBbuff) = R;         ( N# t( p7 s% J" B1 e
++RGBbuff;/ J& ?; P- r- d: W* v, o# v
% E+ F* M' I3 a: u) D
}
5 S; [' q$ D0 m7 F3 {) `3 l}
/ @. J! Y. ~" }( {2 ?4 y0 Z, d  @) xBYTE VC4000Graber::clip255(LONG v)" W9 s9 o2 q4 x* Y5 L
{2 R3 `7 E9 j9 c. f
if(v<0) v=0;
4 ~( `5 u# `$ `) u$ t( velse if(v>255) v=255;. L, J, q7 C6 c% a
return (BYTE)v;" o6 K3 ]& E' P% [% G  g# G
}& K& N. H( C8 W

( u" a% @: l1 S1 @  l, z本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/10/18/1831810.aspx
% b& ^- K- y. G9 N! X/ W9 V
2 b# n# ^4 J( U0 B, g
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-8 20:22 , Processed in 0.035552 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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