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

YUV像素和RGB之间的转换

[复制链接]
发表于 2011-5-30 09:56:44 | 显示全部楼层 |阅读模式
RGB转成YUV(RGB to YUV Conversion). j) c$ D4 m7 F6 C
Y  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
' p& I0 U! i3 X: r0 F4 M" d4 tCr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128* C% `, T* x1 J
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV转成RGB(YUV to RGB Conversion)
& q# M2 z- G" N3 B2 gB = 1.164(Y - 16)                   + 2.018(U - 128)
( k8 F5 u+ u" i5 z% X7 q" ZG = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
/ ^( r+ a; X% |7 j) t" T; jR = 1.164(Y - 16) + 1.596(V - 128)
6 J" i$ t/ k3 M5 L. z/ ]+ L# oR, G, B, Y , Cr, Cb的取值范围都是[0,255].- r8 e8 Z, c5 B

0 R2 c, [. p. M) w) L4 m4 ^原文:http://www.rosoo.net/a/200604/6049.html
% D" Z  w# C' C6 j) p
 楼主| 发表于 2011-5-30 17:08:39 | 显示全部楼层

YUY2视频转化RGB格式

//YUY2视频转化RGB格式 by hardy 2007-10-17
0 s$ a  [  F! n2 a//http://www.fourcc.org/fccyvrgb.php) J4 y7 B& r' c' A# f# j0 f) m$ R
inline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)3 K" ]2 o' `1 H  n% p3 X$ j. g
{
9 `, H4 s/ R& }& q' }$ X//B = 1.164(Y - 16)         + 2.018(U - 128)& _# B) y% J; r! n( T
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128). B2 L% Q4 g1 q$ ]
//R = 1.164(Y - 16) + 1.596(V - 128)- s6 N" _+ _/ r5 Y9 i: Y
BYTE *orgRGBbuff = RGBbuff;
7 V4 ]6 Q+ T$ [# K1 P$ L  bfor(DWORD count=0;count<dwSize;count+=4)
# ^& J" Y% S1 z, \{- b6 L/ I& |" J2 A
//Y0 U0 Y1 V0' @  Q1 E3 g9 W) }
float Y0 = *YUY2buff;! b! L  U* l# i5 X
float U = *(++YUY2buff);+ w3 ?& x3 y# W; w' a
float Y1 = *(++YUY2buff);
4 ?; K: r! u. L+ `float V = *(++YUY2buff);
8 J/ h+ ^" |/ @4 {- ~++YUY2buff;! u9 R2 V+ z$ C- }& J# X- H
*(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));             ?8 F; p4 T' E/ n1 x
*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
& e  k7 z( e. F* O7 I# [6 X( P*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));        8 O  _' b. t/ z+ A! @1 ]# K& j
*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));           
+ ]/ a' l0 C! {; s, n*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   
! `+ V9 S7 ~2 _4 q# ]*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));         : y, J' {5 t! R& A
++RGBbuff;2 Y, q4 [0 a7 N; y5 z2 P3 C' J: [
}
8 X3 i$ @& ^" {" V/ A& I, R}, L3 ]% ^: N* m$ `6 f3 F
inline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
; t% p! f+ D0 \* b9 F{
4 Z& V: a' Y; E1 K//R = Y + 1.14V9 `) Q7 }0 M* U4 _
//G = Y - 0.39U - 0.58V, U* @: e) N- {+ j% X- n% ?
//B = Y + 2.03U
, O% i5 @2 b( M' G' k* b6 Q// R = Y + 1.403V'
' [, K! u( k* b7 Q$ Q  a4 ?9 s//G = Y - 0.344U' - 0.714V') S& Y4 o6 ?. {: y& Y5 Z
//B = Y + 1.770U'3 p; P' M: S0 h. e$ ?0 {
BYTE *orgRGBbuff = RGBbuff;
& A2 y& E. h  \* bfor(DWORD count=0;count<dwSize;count+=4)+ N% b$ w+ l! ]* u5 \2 f
{
( E3 \* `* z/ Y' r* N  Q: q2 S+ X//Y0 U0 Y1 V0
3 q$ c6 W$ N8 ~% Y4 B  Dfloat Y0 = *YUY2buff;
  w6 v' {9 b$ mfloat U = *(++YUY2buff);
* ]3 `: F8 }* Gfloat Y1 = *(++YUY2buff);/ ~! k# W, D& S; K6 e# R0 X
float V = *(++YUY2buff);" x; T7 Z" e' W( P
++YUY2buff;
1 P3 K6 g3 o5 g" `float R,G,B;( c: d; q$ [  q$ t+ N( V' W

' v2 K% g( _1 @, GR = (Y0 + 1.14f*V); , e  J: b" E- _5 u( f
G=(Y0 - 0.39f*U-0.58f*V);   
" }& d* |- D6 Y8 R( h2 AB=(Y0 +2.03f*U);
* @3 l( a* N* Y% T. ^$ g& Uif(R<0) R =0;
1 _8 P( W; B" [. ^% _. Uif(R>255) R=255;' R. O9 J  r0 s9 X2 M: K
if(G<0) G =0;5 w: \5 E( H8 A0 Z, y6 Q, v
if(G>255) G=255;
7 S& u4 Y" R0 s$ L! f1 xif(B<0) B =0;- k: E" Z* ^+ u' `$ f. q  X8 @3 }
if(B>255) B=255;
4 `* Y' h) |, c*(RGBbuff) =     (BYTE)B;         
3 I  y7 I% k9 j*(++RGBbuff) = (BYTE)G;
# K. ?0 C9 y- F, x  a, Y*(++RGBbuff) = (BYTE)R;7 c6 o6 P. \" m) E/ e
R = (Y1 + 1.14f*V);
- D' X; V3 ~, aG=(Y1 - 0.39f*U-0.58f*V);   3 H  Y  P- l7 R; Q5 E
B=(Y1 +2.03f*U)   ;
& j+ y) k" }' E. ?1 o5 j1 h8 L' Uif(R<0) R =0;
% M1 a6 |: F! K0 X" dif(R>255) R=255;
: _: w4 g' @  M# y+ T* V6 Lif(G<0) G =0;& c2 E# v4 n+ @
if(G>255) G=255;7 m1 Z3 k7 V' ?6 O5 N4 g! ?
if(B<0) B =0;+ f  }1 F' Y3 {* S7 |
if(B>255) B=255;  k  J6 F; F0 |+ S$ Q
*(++RGBbuff) =     (BYTE)B;         
+ }  H! H6 e$ G, Z, A6 i3 H, U*(++RGBbuff) = (BYTE)G;* s4 J8 s9 M* Y0 R! Q7 H
*(++RGBbuff) = (BYTE)R;1 l5 U+ M- A0 Y$ b  W: b/ }  y
++RGBbuff;
/ z) a( Y/ s# H! X7 ?( U! x1 H}
. @1 ?1 d; X  S6 w& ^  e}9 g: @; j, y7 d. l! t
inline void YUY2_RGB4(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
8 _* j' ]$ [7 w( c{) O+ v9 I' g! |( n
) b3 o/ X( G4 i$ L
// R = Y + 1.403V'
+ c% o9 b/ d4 Y( @. _6 `7 |//G = Y - 0.344U' - 0.714V'4 R3 \/ {( m# e3 S8 a
//B = Y + 1.770U'
3 E& W% X) x3 o. S" z# JBYTE *orgRGBbuff = RGBbuff;
, N4 z4 M, H) O: i9 qfor(DWORD count=0;count<dwSize;count+=4)& T5 E. c  A, r- i. L
{
$ Q# u& e: u) |( K  W5 W/ T//Y0 U0 Y1 V0) J; `( R6 O4 \1 w' w8 v% F/ \
float Y0 = *YUY2buff;( E$ N$ `  h) G: J7 \+ ]" y6 g( I
float U = *(++YUY2buff);
# Y  B9 P6 P/ l. zfloat Y1 = *(++YUY2buff);
6 E4 L. w. Q, m+ |- Nfloat V = *(++YUY2buff);
3 c4 V1 b5 S1 m3 _' e++YUY2buff;
1 u$ [7 T6 E" k' I: t. @3 b* y' Vfloat R,G,B;
" o5 T6 M: L2 ~% {2 }  g7 a! O
R = (Y0 + 1.403f*V);
; A2 H5 a) Z9 [6 PG=(Y0 - 0.344f*U-0.714f*V);   
8 n& d. Y! j/ X7 o+ Y& w6 n0 NB=(Y0 +1.77f*U); 2 ?# E. q- n; r1 X
if(R<0) R =0;0 D1 v3 {% w2 X
if(R>255) R=255;+ i. I1 p/ i6 D! t; ~! g" T( D5 b
if(G<0) G =0;
; R3 ]: r# j% g: eif(G>255) G=255;7 G- \. K+ s7 i3 `: U1 }
if(B<0) B =0;! I) |, W0 S& O" u1 S$ v
if(B>255) B=255;
% ^7 y2 f; d# x*(RGBbuff) =     (BYTE)R;         
9 l" X/ z4 M: V; ^8 C$ H8 E*(++RGBbuff) = (BYTE)G;' |/ _9 C! m9 \9 l
*(++RGBbuff) = (BYTE)B;
6 O3 p8 T3 `) R- B2 f1 P. m/ rR = (Y1 + 1.403f*V); 0 _; k/ I4 P9 l: r5 U9 f
G=(Y1 - 0.344f*U-0.714f*V);   
" ?: z5 |0 ]: rB=(Y1 +1.77f*U);
+ s: _" `* V6 ~/ P8 Fif(R<0) R =0;  x6 `' F0 B, c  |$ h4 G7 y
if(R>255) R=255;
# V- b8 u1 b0 vif(G<0) G =0;0 Y8 r; S/ Z8 V
if(G>255) G=255;
) Z$ d/ y/ t, d$ `/ cif(B<0) B =0;
- q4 j3 Q( D' D* X3 Vif(B>255) B=255;
! R0 M* e( d1 {1 B*(++RGBbuff) =     (BYTE)R;          9 r2 i, A2 `, k& d  f. I
*(++RGBbuff) = (BYTE)G;
% d6 f$ ~3 v' ~/ \7 `& h; P3 g( c*(++RGBbuff) = (BYTE)B;
' o- V" E+ ?; f" G& d++RGBbuff;
; j, M  B6 K' j4 t' I}& l1 `3 o3 S. p
}
* V* I# v- {8 U1 yinline void YUY2_RGB3(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)4 @  Y2 b: }2 _+ t. t
{. {9 P* u, U% ~3 j- U% L
//B = 1.164(Y - 16)         + 2.018(U - 128)0 [5 c0 M( f1 q$ U. O
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
, b/ B1 f6 `  w6 P+ P  J/ H//R = 1.164(Y - 16) + 1.596(V - 128)+ G2 `  n4 [0 e4 [
BYTE *orgRGBbuff = RGBbuff;
- S0 h0 Z5 k/ r" kfor(DWORD count=0;count<dwSize;count+=4)
( p3 p$ _* i4 l) }: x! r{
) j6 D& i' j' O3 \; x+ u//Y0 U0 Y1 V0% k" Q2 n1 V0 P% Z3 K# `$ Y; t
float Y0 = *YUY2buff;/ ?2 p8 K* j8 s: s
float U = *(++YUY2buff);
! h2 Q/ x) P1 gfloat Y1 = *(++YUY2buff);6 |6 j8 ?8 P# ]9 s
float V = *(++YUY2buff);& K3 ?5 C5 U3 Q: M9 ~( m' i% N
++YUY2buff;; \4 F7 j: ~" L. \
*(RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           
+ B7 R% C9 N% ~1 m*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   * w/ m( Z* r5 u! }- e& `
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));        
- V: G8 P/ C/ X* \2 ^, Q& |*(++RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           
$ n, U& T+ u. b4 D, i7 t*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   3 n% y* m1 f/ M' y7 @, D1 `
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));          ) C  K7 Q( O; ?" `7 d5 H1 _7 h
++RGBbuff;
) C( q8 @+ S2 z4 k: y" ~+ ^/ Z& j8 g8 N2 ]6 z. {5 R
}. o0 J+ k! L( N; L; ^! f
}
: g( \8 q' V) |. _( i) C// http://msdn2.microsoft.com/en-us/library/ms893078.aspx
9 T4 j' G: V2 {" Fvoid VC4000Graber::YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)9 x, B5 @' y3 X# Q+ j  G
{
0 X( H, Z8 L' A1 T//7 a: I# A2 q. e; B' c9 e: Y
//C = Y - 16+ h* t, s$ F6 i
//D = U - 1288 @" H4 @7 E3 B
//E = V - 128" `5 {3 }( v6 s  G
//R = clip(( 298 * C           + 409 * E + 128) >> 8)
, {# z/ m6 }3 M( v6 `//G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)6 g. ^  T* F3 w# [1 Y$ J. Z' J3 {
//B = clip(( 298 * C + 516 * D           + 128) >> 8)4 P/ ?5 ~& m0 s: s! i5 I: K* y+ u
BYTE *orgRGBbuff = RGBbuff;# N& c$ X5 V: ?2 Z+ a. W# W* Q; S
for(DWORD count=0;count<dwSize;count+=4)
4 [6 P0 t* P3 K5 s# P{
# X# Q% o- |. @//Y0 U0 Y1 V07 \  d6 U" S6 n5 X9 Q+ ?9 }& \
BYTE Y0 = *YUY2buff;( O$ _  D. F1 }
BYTE U = *(++YUY2buff);  m/ c% M, _% E% y
BYTE Y1 = *(++YUY2buff);
: s# d0 }3 R7 o1 {! O! t% W6 G% _BYTE V = *(++YUY2buff);# b, L8 i) F1 ]  m! c& X: A
++YUY2buff;
+ ?: |7 p/ s: z0 {9 qLONG Y,C,D,E;
+ a/ O0 u8 I0 v9 ~5 e% YBYTE R,G,B;
+ V1 t" O# V+ f8 i$ z# p  ^4 e* v9 f
Y = Y0;
' [+ H' k- |( g' w7 SC = Y-16;
2 i- K# O- p# R1 T2 S% I2 kD = U-128;0 G) N( N# N( V4 }! o" s( n% ~: O
E = V-128;2 j8 ^% e- Z! n6 m; ~0 Y
R = clip255(( 298 * C           + 409 * E + 128) >> 8);( ?5 U* W' K, q0 C$ D" Z, M3 r
G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);: g7 q) T' C. K3 R4 D' i
B = clip255(( 298 * C + 516 * D           + 128) >> 8);
5 R  G; z: _: ^2 r3 y*(RGBbuff) =   B;           
8 Z+ s! A, |3 W$ N) I*(++RGBbuff) = G;   
6 m3 J1 y0 `" t) G. ^$ Q*(++RGBbuff) = R;        
1 }0 n1 n- E: k% Z* n) PY = Y1;
0 x# d3 E4 m1 \4 N6 tC = Y-16;
6 `/ ^) D' S/ ^D = U-128;5 ?3 x/ \. N: q
E = V-128;
4 b; C6 W# d6 [# [7 x1 F" fR = clip255(( 298 * C           + 409 * E + 128) >> 8);
3 M% D0 t/ C0 R4 b+ M! _' P; _# ^G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);1 K# z+ }  Y) h
B = clip255(( 298 * C + 516 * D           + 128) >> 8);# e3 ~: n! U3 o2 z( D
*(++RGBbuff) =   B;           3 W/ S* c' r& P4 Y; }
*(++RGBbuff) = G;   
" q) `) m, c* y*(++RGBbuff) = R;         
( f( D& q2 Z5 k+ _/ K1 ]8 F++RGBbuff;
  K4 f- e: F. \6 I; t
7 o- W+ T$ Z) D; V& d0 D& }}
  e. K3 v7 J7 p& S( d- Z7 a! D4 \}0 G- V# R! U6 @# E$ Q
BYTE VC4000Graber::clip255(LONG v)' B1 V) m7 V. F: K5 H
{
) d* U6 @- v; j' O6 z( E0 kif(v<0) v=0;
3 X4 j% H7 S& N; t) Kelse if(v>255) v=255;$ p, a% w( l$ q' \, m
return (BYTE)v;# u) h8 I  u" [$ Y  w/ f3 f
}
+ {( }. G( I1 u5 d$ h5 }" C1 H3 V; J- V* s% y8 r0 I; I
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/10/18/1831810.aspx
1 S* w0 \$ H9 Q1 T. y
! n/ x* E) x! d& P
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 02:12 , Processed in 0.019786 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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