Priceless

[Vision] BMP 파일(비트맵 파일) 본문

ComputerVision/OpenCV

[Vision] BMP 파일(비트맵 파일)

Hyun__ 2023. 10. 21. 00:05

비트맵(Bitmap)

정의

비트(픽셀)들의 집합

영상의 전체 크기에 해당하는 픽셀 정보를 그대로 저장한다

 

장점

표현이 직관적이다

데이터의 손실이 없다

 

단점

- 압축되지 않으므로 메모리 용량을 많이 차지한다

예) FHD 기준 BMP는 약 6MB인 반면 JPEG는 약 2MB 이다

- 영상이 확대되거나 축소될 때 화질 손상이 크다

 

 

종류

장치 의존 비트맵(Device Dependent Bitmaps)

출력 장치에 따라 다르게 표현되는 비트맵

장치 독립 비트맵(Device Independent Bitmaps)

출력 장치가 다르더라도 동일하게 출력되는 비트맵

BMP 파일은 Windows 환경에서 비트맵을 DIB 형태로 저장한 파일 포맷이다

 

 

BMP 파일의 구조

WORD는 2 byte, DWORD는 4 byte를 가진다

비트맵 파일 헤더

비트맵 파일에 대한 정보를 가진다

아래의 구조체를 가지고 있다

총 14 byte를 가지고 있다

- bfType: 비트맵 파일 여부를 16진수로 나타낸다

- bfSize: BMP 파일의 크기를 나타낸다

- bfReserved: 사용X

- bfOffBits: 비트맵 파일 헤더부터 픽셀 데이터까지의 오프셋을 나타낸다

 

비트맵 정보 헤더

- biSize: 비트맵  정보 헤더의 크기를 나타낸다

- biWidth: 비트맵 영상의 가로 크기

- biHeight: 비트맵 영상의 세로 크기

- biPlans: 1

- biBitCount: 한 픽셀의 컬러를 나타내기 위한 사용하는 비트 수

트루 컬러(RGB 채널)인 경우 256 x 3이므로 24, 그레이 스케일은 256색이므로 8을 가지고 있다

 

색상 테이블/팔레트

비트맵에 사용되는 색상 정보

- rgbquard 4byte로 rbg와 사용되지 않는 1byte

4의 배수로 맞춘다

 

RGB 값을 GBR 순으로 저장하고 있는 구조체가 있다

 

색상 테이블은 256컬러 이하(그레이 스케일 비트맵)에는 존재하고

트루컬러 비트맵에는 색상 테이블이 존재하지 않으며, 픽셀 데이터에 값을 그대로 저장하고 있다

 

그레이스케일 경우

(0,0,0,0), (1,1,1,0)~(255,255,255,0)의 비트맵을 가진다

크기는 256 x 4 = 1024byte이다

 

 

픽셀 데이터

그레이스케일 비트맵에서는 rgbquad 배열의 인덱스를 저장한

트루 컬러 비트맵은 BGR(RGB의 역순) 순서로 픽셀 값을 저장한다

일반적으로 상하가 뒤집힌 형태로 저장된다

 

효율적인 데이터 관리를 위해 영상의 가로 크기를 4의 배수로 저장한다

3의 배수인 경우 아래와 같이 저장된다

 

 

 

BMP 파일 분석

그레이 스케일 BMP 파일

gray_4x4.bmp

 

각 바이트 값을 출력하면

분홍색은 가질 수 있는 값 목록이고

파란색은 실제 값의 인덱스를 나타낸다

 

 

트루컬러 BMP 파일의 분석

color_4x4.bmp

트루컬러이기 때문에 16+8=24bit로 표현된다

트루컬러이기 때문에 색상 테이블은 없고 바로 색상 정보를 가지고 있다

 

 

비트맵 파일 열기(Visual Studio)

bmp파일을 Visual Studio에서 열기 위해서는

bmp 파일을선택하고 열 때 연결 프로그램을 선택하여

바이너리 편집기를 통해 열면 16진수의 문자로 확인할 수 있다