找回密码
 注册
查看: 4653|回复: 1

YUV像素和RGB之间的转换

[复制链接]
发表于 2011-5-30 09:56:44 | 显示全部楼层 |阅读模式
RGB转成YUV(RGB to YUV Conversion)" P6 m- R) U5 j6 P- K+ I
Y  =      (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
, W1 |, s" `& a0 s$ X" C& HCr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
7 f) _' i; y5 I; `4 GCb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128YUV转成RGB(YUV to RGB Conversion): R8 K* z2 R1 k) v& J+ N
B = 1.164(Y - 16)                   + 2.018(U - 128)- A) W! w, B! J7 [
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)8 y9 g, }4 m  i6 f& B
R = 1.164(Y - 16) + 1.596(V - 128)* \. [" m9 D1 ]* `9 h
R, G, B, Y , Cr, Cb的取值范围都是[0,255].0 [6 I7 C- J/ m  s- t

& c7 A0 [& ?; R2 ]" A* z- t原文:http://www.rosoo.net/a/200604/6049.html) h2 N# a3 c0 x& ~( t
 楼主| 发表于 2011-5-30 17:08:39 | 显示全部楼层

YUY2视频转化RGB格式

//YUY2视频转化RGB格式 by hardy 2007-10-177 S! F0 ~/ e  B) R# o
//http://www.fourcc.org/fccyvrgb.php
' B! C! H1 m4 n* w9 n6 f  Tinline void YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
0 k% u: N- u' K- @) b& I6 \{
9 n. C$ U% q; q- c//B = 1.164(Y - 16)         + 2.018(U - 128)' a( C4 v) d. t- R
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)0 g% l# h* v% |7 u8 `; w0 r
//R = 1.164(Y - 16) + 1.596(V - 128)
% W) c' L* X. o, S; }  A/ B4 {BYTE *orgRGBbuff = RGBbuff;
" b+ ]4 G7 y- u6 `( Wfor(DWORD count=0;count<dwSize;count+=4)8 k  N/ ]4 W. k  A' v6 u  s5 e
{) w" K! B& P6 m
//Y0 U0 Y1 V0- o1 Z: a9 R( |
float Y0 = *YUY2buff;
; m* L0 c  M% C# k( V, x, W+ {  }float U = *(++YUY2buff);. C& ?7 k# [8 W1 W2 F1 }! }
float Y1 = *(++YUY2buff);
; x( ^+ }. |$ X  Kfloat V = *(++YUY2buff);
/ H& u7 r& q6 U; o' d$ J3 G++YUY2buff;
! @8 O& V3 k  ~& Z% D: h, H*(RGBbuff) =   (BYTE)(Y0 + (1.370705 * (V-128)));           
6 y  W; U5 F0 q* [+ P7 i% O  v3 _  z*(++RGBbuff) = (BYTE)(Y0 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   ; P% ?: p% S% R0 ]& a, h
*(++RGBbuff) = (BYTE)(Y0 + (1.732446 * (U-128)));        
! ]5 F: X6 B" p8 [$ t- K*(++RGBbuff) = (BYTE)(Y1 + (1.370705 * (V-128)));           : B( a+ ?( h3 {% k" [1 Q
*(++RGBbuff) = (BYTE)(Y1 - (0.698001 * (V-128)) - (0.337633 * (U-128)));   - C1 E7 \# M- }- D! [+ A. j
*(++RGBbuff) = (BYTE)(Y1 + (1.732446 * (U-128)));         1 N) k- y$ Y) N* k9 ?
++RGBbuff;
/ ]/ I; Y5 W% J}6 N! b8 ]% t' p& ?4 w% A
}) b8 ^8 C8 o% w9 u) R
inline void YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize): N, t: D2 |! e3 S) M1 F. K
{6 s; k  e8 r7 m* W2 X$ _
//R = Y + 1.14V1 l1 p" ~* V2 A4 e5 a
//G = Y - 0.39U - 0.58V: `: c; e; |, H6 k0 j
//B = Y + 2.03U
! Y' S5 L, S1 F, h// R = Y + 1.403V'' O. W7 f8 F; S. W2 b  {
//G = Y - 0.344U' - 0.714V'
  B- q' _) O; ?9 \7 ^//B = Y + 1.770U'+ q# i* E5 s% p: h8 I
BYTE *orgRGBbuff = RGBbuff;! D2 N3 J2 [7 N5 o
for(DWORD count=0;count<dwSize;count+=4)
4 `" V% J$ X, [/ @1 `{$ g- A* K5 e# s
//Y0 U0 Y1 V03 ^0 R! g% e1 b
float Y0 = *YUY2buff;
; A* [5 n0 U, D7 dfloat U = *(++YUY2buff);
2 j8 G- Q3 \" ^float Y1 = *(++YUY2buff);
: T& f/ B  L. B- c% Nfloat V = *(++YUY2buff);
4 S2 y! Z, S* A$ c0 C: Q# @++YUY2buff;$ m, F$ ~& o2 F/ S+ H
float R,G,B;, q7 ^  x2 r. N! l. n

. i$ k7 X- m5 E: {1 AR = (Y0 + 1.14f*V);
" B5 W8 T  b; f( a1 W. k  pG=(Y0 - 0.39f*U-0.58f*V);   
- c! z3 H: ], W7 qB=(Y0 +2.03f*U); ' a3 J  p+ V9 {: ~& B  X
if(R<0) R =0;* N2 Q: u$ `, f& o7 c$ c9 @( f
if(R>255) R=255;. s0 i6 [" X: h  ]5 v
if(G<0) G =0;5 {( H( q0 x( S
if(G>255) G=255;/ o% ^- k) y) |2 F8 I4 f# r# r9 t
if(B<0) B =0;
9 G% s9 |+ F1 v9 h, n. v$ N: b) Cif(B>255) B=255;
* C7 j- p2 b- f' G& x1 r3 W*(RGBbuff) =     (BYTE)B;         
6 D: ~+ Z% P& Q% h+ [*(++RGBbuff) = (BYTE)G;3 `" B9 z8 Q3 @# B& b/ F% x8 X
*(++RGBbuff) = (BYTE)R;3 ~: P: I" q4 R/ ]+ `9 s7 c
R = (Y1 + 1.14f*V); % E8 x) |, g- @" h6 v0 }
G=(Y1 - 0.39f*U-0.58f*V);   / R. f9 @3 M4 h: p2 e$ k
B=(Y1 +2.03f*U)   ; + H% c) t2 Q  Z1 l7 d
if(R<0) R =0;
3 Q3 M' v: Q. Kif(R>255) R=255;$ i2 k4 ^! |& A3 u' C, G( ^
if(G<0) G =0;9 x* a+ R2 x" D! c( v
if(G>255) G=255;
4 S# U* A, V9 `8 i/ Hif(B<0) B =0;% j- x+ S& W* h9 Z6 }7 x7 W1 V- }
if(B>255) B=255;
8 W/ C/ Z! H' M* y3 l: ~*(++RGBbuff) =     (BYTE)B;         
9 P7 b; U; }# x5 e  k& a# f2 o! h8 f*(++RGBbuff) = (BYTE)G;5 w( X, a8 p7 ^  j. @9 ^) x
*(++RGBbuff) = (BYTE)R;
8 L8 R" T9 A% ^) n3 q0 Z% u1 J++RGBbuff;
. h; O$ b& r/ ]}
( o1 ?( ^* k3 E& v}
! e) Q1 `7 ^. w# o4 o7 [inline void YUY2_RGB4(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)/ X' p' ^. H! s" K" ?
{
1 @( q4 }0 ^) d' y4 z
! P2 o+ P( H9 C: q8 a2 c+ N  E// R = Y + 1.403V'8 m* O. m6 o: V$ l; X; `% p' _6 }
//G = Y - 0.344U' - 0.714V'( a  q, E, g  f" J
//B = Y + 1.770U'8 [# j& w* t) N
BYTE *orgRGBbuff = RGBbuff;
, ~3 Z3 x1 C6 m- q) r% Rfor(DWORD count=0;count<dwSize;count+=4); E( l$ j5 @* G+ D  y
{
8 O0 l- h( T* Z/ j//Y0 U0 Y1 V07 n* c, Z; a" J
float Y0 = *YUY2buff;$ R% H! r# }5 F/ ^1 P! i
float U = *(++YUY2buff);& y% B( c) y( y1 |& r7 c  x( p
float Y1 = *(++YUY2buff);  z5 A& t& B% w* R8 e
float V = *(++YUY2buff);
' K) Y6 p! T+ N4 S. l0 W8 `5 Q, d++YUY2buff;4 y% Z$ p: F. q* p0 @& m/ F
float R,G,B;. x9 b# V8 X; j9 R" P
& i3 r8 \/ q: v( M4 H8 S8 Q2 N) ?
R = (Y0 + 1.403f*V);
9 c2 C1 r* E3 U3 @5 sG=(Y0 - 0.344f*U-0.714f*V);   
5 A9 c1 Z, G2 q8 V/ f; ^4 x  FB=(Y0 +1.77f*U);
/ e& ]- o3 ?( }6 x1 Yif(R<0) R =0;
+ C+ V$ k9 b6 f% M9 @" E% nif(R>255) R=255;
" H- ~+ \0 A8 a0 @if(G<0) G =0;
; O  r9 Q$ ]. r/ t9 Zif(G>255) G=255;6 `9 h, U) Q( D& O# Z! u- V) M
if(B<0) B =0;9 K1 Y7 J1 j. B# E4 }6 c' {- H
if(B>255) B=255;
" Y$ G8 C, u2 X8 \: v* \7 i*(RGBbuff) =     (BYTE)R;          9 D- ~0 \( ^% X: t$ G5 Y5 b
*(++RGBbuff) = (BYTE)G;
* h$ `& n/ J* F& c8 ]*(++RGBbuff) = (BYTE)B;& v8 p. d& ?2 z' y0 Y& o6 ^
R = (Y1 + 1.403f*V); 5 W$ S& P  u, i, [
G=(Y1 - 0.344f*U-0.714f*V);   8 \5 G. C3 o. m6 B$ ?1 \
B=(Y1 +1.77f*U);
/ {( b$ i- g( [4 Zif(R<0) R =0;5 v# C0 |4 {- S  m2 M' D6 J
if(R>255) R=255;! E: X% d2 i* \( M' n
if(G<0) G =0;6 p4 R7 d+ g2 ]2 f2 z% v
if(G>255) G=255;
( e# F1 \' K! U$ u; M4 H0 \if(B<0) B =0;
" x& b2 A% `3 [/ N% G8 O, B0 i# Iif(B>255) B=255;
4 k8 }) p- ?9 i$ J  e$ B*(++RGBbuff) =     (BYTE)R;          . g& a' K+ s9 F1 J6 H. I
*(++RGBbuff) = (BYTE)G;7 L+ K9 r; x6 V' b5 a- X: b, x- i& i# E
*(++RGBbuff) = (BYTE)B;  D+ h- V/ e4 o4 J
++RGBbuff;
; w8 u5 }6 Y& r0 N- S. [! K}; P. N" x- F* L/ [
}
* F1 a9 j2 E" B( g! O; t2 O3 Dinline void YUY2_RGB3(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
, b; E9 H3 p# T" M{0 v, s5 F1 _/ y
//B = 1.164(Y - 16)         + 2.018(U - 128)
3 M" k% A9 ]; c& ^, p( p0 P6 U+ K//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
% [* C$ l5 i8 F! T5 [9 }//R = 1.164(Y - 16) + 1.596(V - 128)! V  }3 c# d7 i9 U% V! c# Q
BYTE *orgRGBbuff = RGBbuff;
2 w) ~6 \0 z: Pfor(DWORD count=0;count<dwSize;count+=4)
$ E' j4 |/ [  D% v/ _{) o; c( \) r  w
//Y0 U0 Y1 V0
- ]: T9 b+ r2 q3 r' X) Hfloat Y0 = *YUY2buff;$ {. m/ P0 v7 O( g8 P  ?9 @1 t6 T
float U = *(++YUY2buff);- B' h; |) P+ N) z* @
float Y1 = *(++YUY2buff);" T% ]" G( |( o6 O
float V = *(++YUY2buff);6 x7 l6 {$ T: B! q
++YUY2buff;
; I# ^1 ]$ C8 P" Z) Y*(RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           ) L! E' \+ T, S/ P; G0 a
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   " F% C; Q( E$ q1 \
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));        
. l4 j8 f, P% {, J3 u*(++RGBbuff) =   (BYTE)(1.164f*(Y0 - 16)+ 2.018f*(U - 128));           # j, Z4 O- ^- x
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) - 0.813f*(V - 128) - 0.391f*(U - 128));   8 U/ p( C7 V3 ^/ F  N! B% Z
*(++RGBbuff) = (BYTE)(1.164f*(Y0 - 16) + 1.596f*(V - 128));         
1 i6 F5 J! l$ i/ T- d, X5 }++RGBbuff;) d6 d, y& T, |" X4 X( R

$ e1 Q* h3 z+ R- C# k}
, r6 C& x) J. J}
0 |' V0 A1 N! s. V5 `" n// http://msdn2.microsoft.com/en-us/library/ms893078.aspx
( Y3 B2 ~# A3 ~, S1 C' Lvoid VC4000Graber::YUY2_RGB(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
- U$ U& N% T! [; e/ V- @5 u{& ^  d; Z0 L; n5 s7 j- b
//
6 o' L/ Y7 n: W% A, p5 C//C = Y - 16- l2 x! f4 X1 R! X
//D = U - 128
4 ^; ^( _, A; o1 q+ ]+ y; `4 s( E//E = V - 128% D$ B! @5 i& t
//R = clip(( 298 * C           + 409 * E + 128) >> 8)( J* U4 N* q7 S9 Z, R# o
//G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)! C4 u4 R# F8 H  Q
//B = clip(( 298 * C + 516 * D           + 128) >> 8)
& e* X  K7 r* |BYTE *orgRGBbuff = RGBbuff;1 h6 j( h* ^; F+ E4 T2 k, v
for(DWORD count=0;count<dwSize;count+=4)
; k3 D0 h/ h0 H9 }- a, W$ ?: {{& t3 m- ]  @9 z2 _2 `2 |) G) j6 e4 V
//Y0 U0 Y1 V0& u; D, ?4 w7 c7 K
BYTE Y0 = *YUY2buff;
( ^1 p3 _- \  t. S3 y; [BYTE U = *(++YUY2buff);1 q; \4 a. h2 L/ Z- h
BYTE Y1 = *(++YUY2buff);, ~5 [! z5 h1 Q& c( ?# g0 |
BYTE V = *(++YUY2buff);% m0 l2 U" O& c8 v4 h  a! W' g& `
++YUY2buff;
4 a# x0 x7 {% X* rLONG Y,C,D,E;1 L& P. I/ _) d( Q) A
BYTE R,G,B;- b7 [7 V5 M! X8 m
8 Q" A6 y8 A; g2 F, @  f1 b
Y = Y0;
2 }2 Y  G9 [& D) ]C = Y-16;) Q# X8 T+ l8 o7 B7 I; Z# S
D = U-128;
- f9 D) S: \5 F1 t! fE = V-128;
# l1 j) s$ K$ m' Y8 {R = clip255(( 298 * C           + 409 * E + 128) >> 8);
' x$ F0 ^% }2 u7 V- WG = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
+ r* [1 T9 E0 C+ K4 T4 qB = clip255(( 298 * C + 516 * D           + 128) >> 8);
' C  X# ~! ?  C7 b*(RGBbuff) =   B;           
) h9 i8 _; A- p: K9 o7 i: }( M7 {*(++RGBbuff) = G;   7 J: o& V+ x4 {" g/ a8 C1 K
*(++RGBbuff) = R;        / a. }9 Z+ |" L
Y = Y1;
$ Q4 X5 H6 T+ i  a7 @C = Y-16;4 D" J' s; d" P  {, y' r" C, W
D = U-128;6 K# J4 [6 R- r  a$ s0 b' A
E = V-128;
6 f2 O& u8 T) cR = clip255(( 298 * C           + 409 * E + 128) >> 8);
3 e0 n' {: Y, N( Z! ~G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
4 D! k" y3 N& f# iB = clip255(( 298 * C + 516 * D           + 128) >> 8);% {2 {2 X* ?3 Y/ y
*(++RGBbuff) =   B;           $ ?9 y5 d/ }4 Y% y# J- [
*(++RGBbuff) = G;   ( V' b& ?" ?5 _, k8 T2 g  W
*(++RGBbuff) = R;         ; H5 D  x# v9 Y, N. v
++RGBbuff;
, P. t' u) ~0 Z0 S: q
4 R- Q' E' h% s9 o2 T) O: y}
9 |4 w8 H3 J$ m}2 i7 `% B' ^' J% r" Q
BYTE VC4000Graber::clip255(LONG v)
! E' {( i& R# f1 ~5 m- Y{
- o9 n: G( r+ L( Y: o" f/ iif(v<0) v=0;
7 ?- W4 ?4 I% v4 r8 Delse if(v>255) v=255;
; z) \+ a  e$ s+ b& {% Breturn (BYTE)v;
0 P- S. @/ k1 s1 K8 I" ?/ |) @) z}
* ?6 m- Z$ M" O5 R$ b
* C- u  G1 |3 a$ B' m0 V8 H9 X( P本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hardVB/archive/2007/10/18/1831810.aspx2 V7 k/ F$ ^* ^; Y6 C4 R) c
& A) R# k6 I0 Y
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-1 21:56 , Processed in 0.015441 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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