YUY2到YUV420的轉換

2021-05-22 02:34:08 字數 1612 閱讀 1826

#include

#include

#include

#include

//src_filename out_filename src_width src_height frameno

int main(int argc, char* argv)

else

src_size = (src_width * src_height) << 1 ;//對於yuy2 4:2:2

src_buf = (unsigned char *)malloc(src_size*sizeof(char));

memset(src_buf, 0, src_size);

tem_size = (src_width * src_height) << 1; ///對於yuv 4:2:2

tem_buf = (unsigned char *)malloc(tem_size*sizeof(char));

memset(tem_buf, 0, tem_size);

out_size = src_width*src_height * 1.5;//對於yuv 4:2:0

out_buf = (unsigned char *)malloc(out_size*sizeof(char));

memset(out_buf, 0, out_size);

in_file = fopen(src_filename, "rb");

if (!in_file)

out_file = fopen(out_filename, "wb");

if (!out_file)

while(framenum>0 && !feof(in_file))

p = p + src_width*2;

y = y + src_width;

u = u + (src_width>>1);

v = v + (src_width>>1);

}//復位

y = tem_buf;

u = y + src_width*src_height;

v = u + (src_width*src_height>>1);

for(int l=0; l>1);

memcpy(v2, v, src_width>>1);

u2 = u2 + (src_width>>1);

v2 = v2 + (src_width>>1);

u = u + (src_width);

v = v + (src_width);

}memcpy(y2, y, src_width*src_height);

fwrite(out_buf, sizeof(char), out_size, out_file);

printf(".");

framenum--;

}fflush(out_file);

free(src_buf); src_buf=null;

free(tem_buf); tem_buf=null;

free(out_buf); out_buf=null;

fclose(in_file);

fclose(out_file);

return 0;

}

YUY2 YUYV 轉YUV420原始碼分析

原始碼思路 1 yuv有打包 packed 格式和平面 planar 格式。yuy2是packed格式,而yuv420是planar格式,需要轉換。提取出原影象中每個y u v分量,放入陣列中,在根據這些分量組合成新的yuv420格式。2 yuv420相比yuy2,在y分量上沒有變化,對u v進行各...

yuv420和yuv420p的區別

yv12和i420的區別 在採集到rgb24資料後,需要對這個格式的資料進行第一次壓縮。即將影象的顏色空間由rgb2yuv。因為,x264在進行編碼的時候需要標準的yuv 4 2 0 但是這裡需要注意的是,雖然yv12也是 4 2 0 但是yv12和i420的卻是不同的,在儲存空間上面有些區別。如下...

yuv420 轉bmp的方法

yuv420 轉bmp的方法 我找到了乙個c寫的exe 但是c的水平我實在是不敢去修改那個原始碼,所以我乾脆就呼叫這個dll,在c 裡建立了下面這個類,然後呼叫 y2b.exe 來轉換,而且不會顯示出來那個黑屏.要知道怎麼回事,就看 吧 呵呵.using system using system.co...