1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
typedef struct
{
uchar R,G,B;
}Pixel;
Pixel convertYUVtoRGB(int y, int u, int v) {
int r,g,b;
int value;
Pixel P;
//printf("y %d u %d v %d avant\n",y,u,v);
y=y*255.0/65535-16;
u=u*255.0/65535-128;
v=v*255.0/65535-128;
//printf("y %d u %d v %d apres\n",y,u,v);
r = y + (int)(1.402f*u);
g = y - (int)(0.344f*v + 0.714f*u);
b = y + (int)(1.772f*v);
r = r>255? 255: r<0 ? 0 : r;
g = g>255? 255 : g<0 ? 0 : g;
b = b>255? 255 : b<0 ? 0 : b;
P.R = r;
P.G = g;
P.B = b;
//printf("r %d g %d b %d\n",r,g,b);
return P;
}
int i,j,pos_1,frame_size;
uint16_t *src;
uchar * dst;
IplImage *Frame=cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 3 );
dst = (uchar *)Frame->imageData;
src = (uint16_t *)buffer->data;
for(i=0,j=0; i<frame_size; i=i+4)
{
Y1 = src[i];
U = src[i+1];
Y2 = src[i+2];
V = src[i+3];
P = convertYUVtoRGB(Y1,U,V);
dst[j] = P.R;
j++;
dst[j] = P.G;
j++;
dst[j] = P.B;
j++;
P = convertYUVtoRGB(Y2,U,V);
dst[j] = P.R;
j++;
dst[j] = P.G;
j++;
dst[j] = P.B;
j++;
}
cvShowImage( "COULEUR",Frame );
cvWaitKey( 10 ); |
Partager