Transcript RGB
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401 [email protected] Last update : September 9, 2015 Image format 영상은 unsigned char *에 저장한다. 1 byte: 0~255(black~white) W: width, H: height Raw rgb file unsigned char *R, *G, *B; R = new unsigned char[W*H]; G = new unsigned char[W*H]; B = new unsigned char[W*H]; YUV unsigned char *Y, *U, *V; Y = new unsigned char[W*H]; U = new unsigned char[W*H/4]; V = new unsigned char[W*H/4]; U V Raw 또는 YUV 동영상 U-128 연속적으로 저장하면 된다. 2016-07-05 MediaLab , Kyunghee University V-128 2 Binary file 입출력 #include <stdio.h> 1. 바이너리 파일 읽기: 우선 int가 10000개 저장되어있는 파일 "aaa.xxx"를 읽어 서 array A에 저장하는 프로그램이다. FILE *bb; int A[10000]; bb = fopen("aaa.xxx","rb"); // 실패하면 NULL을 리턴함 fread(A,sizeof(int) ,10000,bb); // 성공하면 10000을 리턴함 fclose(bb); 2. 바이너리 파일 쓰기: int가 10000개 저장되어있는 A에서 뒤의 5000개를 파일 "bbb.yuv"에 저장하고 연이어, B에서 5000개를 넣는다. FILE *bb; unsigned char R[10000], G[10000],B[10000]; ---- R, G, B에 값을 넣는 부분 ---bb = fopen("bbb.rgb","wb"); // 실패하면 NULL을 리턴함 fwrite(R,sizeof(char) ,10000,bb); // 성공하면 10000을 리턴함 fwrite(G,sizeof(char)*100,100,bb); // 성공하면 100을 리턴함 fwrite(B,sizeof(char)*200,50,bb); // 성공하면 50을 리턴함 fclose(bb); 2016-07-05 MediaLab , Kyunghee University 3 다음 영상은 어떻게 만드나? (R,G,B)=(255,0,0) (0,0) (R,G,B)=(255,255,0) (100,80) (399,299) (139,99) unsigned unsignedchar charR[120000], R[120000],G[120000], G[120000],B[120000]; B[120000]; fff fff==fopen(“flag.raw”,”wb”); fopen(“flag.rgb”,”wb”); for(m=80;m<200;m+=5){ //전체 노랗게 //전체 노랗게 for(i=0;i<120000;i++){ R[i] = 0; G[i] = *(B+i) = 255;} for(i=0;i<120000;i++){ R[i] = G[i] = 255; *(B+i) = 0;} // 가운데 빨간 사각형 // 가운데 빨간 사각형 for(i=80; i<100; i++) for( j=100; j<140; j++) for(i=80; i<100; i++) for( j=0; j<40; j++) { k = i*400+j; R[k] = 255; *(G+k) = *(B+k) = 0; } { k = i*400+j+m; R[k] = 255; *(G+k) = *(B+k) = 0; } // 파일에 넣기 // 파일에 넣기 R G B R G R G B fwrite(R,400,300,fff); fwrite(G,400,300,fff); fwrite(B,400,300,fff); fwrite(R,400,300,fff); fwrite(G,400,300,fff); fwrite(B,400,300,fff); R fclose(fff); } G fclose(fff); 2016-07-05 MediaLab , Kyunghee University 4 Interlaced and non-interlaced Non-interlaced : all R + all G + all B Interlaced : RGBRGBRGB…. Pixel by pixel R #define W 300 #define H 200 #define WH 60000 unsigned char R[WH], G[WH], B[WH],RGB[3*WH]; For(i=0; i<H; i++) for( j=0; j<W; j++){ k = W*i+j; kk = (W*i+j)*3; RGB[kk] = R[k]; RGB[kk + 1] = G[k]; RGB[kk + 2] = B[k]; } 2016-07-05 MediaLab , Kyunghee University G RGB B R G RGB B 5 YUV viewer YUV viewer (RGB 형식의 raw file을 볼 때) 프로그램 내에서 파일을 저장할 때 “ bbb.rgb” 로 확장자를 “. rgb”로 한다. YUVSequenceViewer.exe 실행 File Open 저장된 .rgb 선택. image의 넓이, 높이 입력 format은 반드시 “RGB” 2016-07-05 MediaLab , Kyunghee University 6 YUV viewer YUV viewer (yuv 형식의 file을 볼 때) 프로그램 내에서 파일을 저장할 때 “ bbb.yuv” 로 확장자를 “. yuv”로 한다. YUVSequenceViewer.exe 실행 File Open 저장된 .yuv 선택. image의 넓이, 높이 입력 format은 반드시 “YUV” 2016-07-05 MediaLab , Kyunghee University 7 Convert RGB to GIF RGB 파일을 GIF 파일로 바꾸는 방법 https://www.coolutils.com/online/RGB-to-GIF 에 접속한다. 1. 변환하고자 하는 RGB 파일을 선택한다. 2. 원하는 확장자명을 수정해준다.(여기선 GIF 선택) 3. Download Converted File 버튼을 눌러 변환된 것을 확인한다. 2016-07-05 MediaLab , Kyunghee University 8 Week 3 assignment 움직이는 RGB 영상을 만들어 보라. 모양, 방향을 정하고 할 것 확장자(extension)은 *.rgb Non-interlaced interlaced #define W 400 #define H 200 RGB 영상에서 2X8 matrix를 떼와서 A라고 하고, 다음 B matrix와 곱하여 결과를 분석하라. 2016-07-05 MediaLab , Kyunghee University 9