1. 영상의 표현방법
1) 그레이스켈일 영상 (Grayscale)
색상정보가 없고 오직 밝기 정보로만 구성되있고 , 밝기 정보를 256단계로 표현 한다.
하나의 픽셀값은 0~255사이의 정수 값을 가진다. (0:검은색 255:흰색)
c/c++에서 unsigned char로 표현한다.
typedef unsigned char uchar; typedef unsigned char BYTE; |
2) 트루컬러 영상(Truecolor)
다양한 색상을 표현할수 있다. → Red,Green,Blue를 256단계로 표현 즉, (256^3 = 16,777,216)색상 표현이 가능하다.
각각 0~255까지 범위로 표현가능하다.(0:해당 색이 전혀 없는상태 255:해당색이 가득찬 상태)
#FF0000 |
#00FF00 |
#0000FF |
255,0,0 (빨강) |
0,255,0(초록) |
0,0,255(파랑) |
3) 픽셀(Pixel)
영상의 기본단위(Picture element), 화소
영상에서는 2차원 배열을 사용한다.
2. 프로그래밍 기초
1)정적 2차원배열
unsigned char a[5][10] |
a[0][0] |
a[0][1] |
a[0][2] |
.... |
a[0][10] |
a[1][0] |
a[1][1] |
a[1][2] |
.... |
.... |
a[2][0] |
a[2][1] |
a[2][2] |
.... |
a[5][10] |
unsigned char:1바이트 사용(0~255사이의 정수를 표현할수있다.)
단점 : 배열의 크기를 미리 알고있어야 하기 때문에 다양한 크기의 영상을 표현하기 부족하다.
Stack에 메모리를 할당하기때문에 대략 1MB 까지 할당가능하다.
※Char 와 unsigned char의 차이점 ? char에는 음수가 있지만(-128~127) unsigned char에는 음수가 존재하지 않는다.(0~255) |
2)동적 2차원배열
int w = 5; int h = 10; unsigned char ** a; //로컬 포인터 변수공간 a=new unsigned char*[h]; // 동적 할당된 포인터형 공간 for(int i = 0; i < h ; i++){ a[i] = new unsigned char[w]; //동적 할당된 데이터 공간 } |
프로그램 동작중 다양한 크기의 영상을 재생할수 있다.
Heap 영역에 메모리를 할당한다. 즉 x86의 경우 2GB까지 할당가능(X64의 경우 8TB가능)
2-1) 동적 2차원 배열의 생성 & 초기화
#include <memory.h> . . . . unsigned char** a; a=new unsigned char * [h]; for(int i = 0; i < h ; i++){ a[i]=new unsigned char[w]; memset(a[i],0,sizeof(unsigned char)*w); //a[i]번지부터 sizeof(unsigned char)*w 바이트 크기만큼 메모리공간을 0으로 설정 } |
memset(메모리의 시작 주소, 메모리에 채우고자 하는값, 채우고자 하는 메모리(바이트)크기 );