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