- 흑백 영상은 회색의 음영 또는 명암을 나타내는 이미지.
- 각 픽셀은 256단계의 회색 톤을 나타내는 데, 0은 검은색, 255는 흰색 사이의 값을 가지게 됨.
- RGB 영역에서의 흑백 영상은 R,G,B의 모든 픽셀 값이 동일한 값을 가지고 있다.
- 일반적으로 흑백 영상은 8비트의 이미지로 표현되며, 각 픽셀은 밝기 정보만을 가지고 있음.
- 이진 영상은 각 픽셀이 오직 두가지의 값 중 하나만을 가지는 이미지.
- 일반적으로 픽셀 값은 0과 1 또는 0과 255 중 하나의 이진 값을 가지고 있음.
- 일반적으로 물체의 존재와 부재를 나타내는 데 사용되고 있음.
- 정보 손실이 많고, 묘사력이 낮지만 일부 응용프로그램 등에서 물체 감지나 패턴 인식, 이미지 압축과 같은 상황에서 유용하게 활용되고 있음.
실습에서 사용할 lena512.raw파일로 Hex editor를 통해 열어보자!
- 해당 파일은 16진법(Hexadecimal) 형식으로 저장되어있는 1차원 배열 형태를 띄고 있으며, 0에서부터 영상의 좌측 상단에서 우측 하단의 픽셀 값이 저장되어 있다.
- 이미지 크기는 (512,512)이므로, 0번째 항부터 1FF번째 항까지 한 줄(가로 길이)에 해당하는 픽셀의 크기를 가지고 있다.
작성 코드
- lena512.raw 파일을 통한 흑백영상 디스플레이
# Pillow 라이브러리에서 Image호출 from PIL import Image # 파일 경로 지정 (lena512.raw) file_path = "lena512.raw" # 새로운 RGB형식의 이미지 생성, 이미지 크기는 512,512 img=Image.new("RGB",(512,512)) # pix에 이미지 로드 pix=img.load() # 데이터 파일을 이진법 모드로 open file=open(file_path,'rb') # 파일에서 데이터를 읽어오고 data=file.read() # 파일을 닫음 file.close() # 생성된 RGB형식의 이미지의 pixel값에 숫자를 대입하는데 for y in range(512): for x in range(512): # 이미지 픽셀값에 읽어온 픽셀 값을 대입시킴 pix[x,y]=(data[y*512+x],data[y*512+x],data[y*512+x]) # 이미지 출력 img.show()
흑백영상 출력
작성 코드
- lena512.raw 파일을 통한 이진영상 디스플레이
# Pillow 라이브러리에서 Image호출 from PIL import Image # 파일 경로 지정 (lena512.raw) file_path = "lena512.raw" # 새로운 RGB형식의 이미지 생성, 이미지 크기는 512,512 img=Image.new("RGB",(512,512)) # pix에 이미지 로드 pix=img.load() # 데이터 파일을 이진법 모드로 open file=open(file_path,'rb') # 파일에서 데이터를 읽어오고 data=file.read() # 파일을 닫음 file.close() # 생성된 RGB형식의 이미지의 pixel값에 숫자를 대입하는데 for y in range(512): for x in range(512): # 127을 기준으로 이보다 높으면 255(흰색) 낮으면 0(검정색)으로 표현 tmp=255 if data[y*512+x]>127 else 0 pix[x,y]=(tmp,tmp,tmp) # 이미지 출력 img.show()
이진영상 출력