픽셀이 2차원 행렬로 나열되어 있는 형태
픽셀 : 영상의 기본 단위, picture element, 화소
색상 정보 없이 밝기 정보로만 구성된 영상
밝기 정보를 256단계(0~255)로 표현
unsigned char
로 표현
1Byte 사용
OpenCV
typedef unsigned char uchar;
컬러 사진처럼 다양한 색상을 표현할 수 있는 영상
RGB 색 성분을 각각 256단계로 표현
unsigned char
자료형 3개 배열 또는 구조체
3Bytes 사용
class RGB
{
unsigned char R;
unsigned char G;
unsigned char B;
}
가로와 세로가 반대인 것에 유의할 것
OpenCV : 영상
matrix : 행렬
VGA(640x480)
unsigned char : 1바이트 사용
2차원 배열 전체 크기만큼의 메모리 공간이 연속적으로 할당됨
Stack 영역에 메모리 할당 : 대략 1MB까지 할당 가능
FHD(1920x1080) 저장 불가
unsigned char a[480][640] {};
행 단위로만 연속적 메모리 공간이 보장
프로그램 동작 중 다양한 크기의 영상 생성 가능
Heap 영역에 메모리 할당 : x86의 경우 2GB, x64의 경우 8TB까지 할당 가능
int w = 640;
int h = 480;
unsigned char** p;
p = new unsigned char*[h];
for (int i = 0; i < h; i++){
p[i] = new unsigned char[w] {};
}
2차원 배열 p의 모든 원소 값 1씩 증가
for (int y = 0; y < h; y++){
for (int x = 0; x < w; x++){
p[y][x] += 1;
}
}
for (int y = 0; y < h; y++)
delete[] p[i];
delete[] p;
2차원 배열을 1차원 배열에 저장하여 사용
int w = 10, h = 10;
unsigned char* data = new unsigned char[w * h] {};
...
delete[] data;
특정 좌표 (x, y) 위치의 픽셀 값 참조
각 열의 시작 주소 |
---|
data |
data+1*w |
data+2*w |
data+3*w |
data+4*w |
data+5*w |
data+6*w |
data+7*w |
data+8*w |
data+9*w |
unsigned char& p1 = *(data + y * w + x);