이미지 파일의 형식
PIL 라이브러리
- Python Imaging Library
- 스웨덴 기업 Secret Lab AB가 1995년부터 개발, 2011년에 중단
- Pillow라는 이름으로 포크(fork)되어 현재까지 지속 중
- 이미지 파일 열기, 닫기, 변환 등 기본적인 기능 제공
이미지 열기
- PIL 라이브러리
from PIL import Image
- 이미지 파일인 balloon.webp를 열기
img = Image.open("balloon.webp")
- img 객체를 출력
img
- 이미지 파일의 형식을 나타내는 문자열을 반환(이 경우는 'WEBP' 문자열이 반환)
img.format
컴퓨터 그래픽의 방식
- 비트맵 방식: 이미지를 점으로 표현. 하나의 점이 픽셀(pixel)
- 벡터 방식: 이미지를 선으로 표현
- 포인트 클라우드 방식: 점의 3차원 좌표로 표현
- 일반적으로 컴퓨터 비전에서는 비트맵 방식을 사용
비트맵 방식 bitmap
- 이미지를 작은 정사각형 모양의 픽셀이라고 하는 점들로 저장하는 방식
- 각각의 픽셀이 밝기를 가짐
- 픽셀이 꺼지면(밝기 0) 검은 색이 되고, 최대로 켜지면 흰색. 그 중간에서는 회색.
- 대부분의 사진 및 비디오 파일 형식, 이미지 처리나 컴퓨터 비전에서도 주로 사용
- 비트맵 방식은 이미지를 확대하거나 축소할 때 왜곡이 생길 수 있음
- 작은 이미지를 크게 확대해보시면 이미지가 흐릿해지는 것을 볼 수 있음
- 이미지의 크기가 커지면, 이미지 한 장에 들어가는 점의 개수도 늘어나기 때문에 용량이 커짐
컬러 비트맵 이미지
- 여러 개의 픽셀을 합쳐서 표현
- 빛의 삼원색(RGB)
- 빨강(R)
- 초록(G)
- 파랑(B)
- 인쇄용 이미지는 CMYK를 사용
- 색상이 중요하지 않으면 흑백으로 변환하여, 계산량을 절약
비트맵 저장 형식
- JPEG(Joint Photographic Experts Group)
- 대부분의 사진이나 이미 지에 사용되며, 손실 압축 방식으로 이미지를 압축
- 편집/저장을 반복하면 화질이 열화됨
- GIF(Graphics Interchange Format)와 PNG(Portable Network Graphics)
- 작은 애니메이션 이미지나 로고, 아이콘 등에 사용
- 비손실 압축 방식으로 그래픽이나 웹 디자인에 많이 사용
- WebP
- Google에서 웹 페이지에서 더욱 빠르게 로딩되도록 개발한 영상/이미지 파일 포맷
- 기존의 JPEG와 PNG, GIF의 장점을 모두 합쳐서 손실 압축과 비손실 압축을 모두 지원
- 더 효율적인 압축 방식을 사용하기 때문에 파일 크기는 더 작고, 이미지 품질은 더 높은 특징
- tiff Tagged Image File Format 출력용
- raw Raw Image File 비압축 원본
벡터 방식 vector
- 벡터 방식은 이미지를 수학적인 곡선과 모양으로 표현
- 그래픽 디자인 및 로고 등에 사용
- 이미지를 확대하거나 축소할 때도 깨지지 않고 선명한 이미지를 유지
- 수학적인 곡선이므로 계산만 다시하면 이미지를 무한히 확대나 축소할 수 있어서, 이미지의 크기와 용량이 관계가 없음
- 카메라로 찍은 사진 등은 픽셀 방식의 형태여서 벡터 방식으로 저장하려면 변환이 필요
- 컴퓨터 비전에서는 벡터 방식은 잘 쓰지 않음
- 저장 형식:
- pdf Portable Document Format 문서용
- eps Encapsulated PostScript 문서용 (pdf로 대체)
- svg Scalable Vector Graphics 주로 웹 사이트에서 사용
포인트 클라우드
- 3D 이미지에 사용하는 방식
- 각각의 포인트는 이미지의 한 점을 나타내며 색상 정보도 함께 저장
- 주로 라이다(LiDAR) 같은 장비로 찍은 이미지를 표현할 때 사용
이미지 파일의 크기
- 이미지 파일의 크기를 나타내는 (가로, 세로) 형식의 튜플(tuple)을 반환
img.size
- 해당 코드를 실행하면, 이미지 파일의 가로와 세로 크기가 나타남
모드
- 이미지 파일의 색상 모드
img.mode
- RGB: 빨강, 초록, 파랑 3가지 색을 사용
- RGBA: 빨강, 초록, 파랑 3가지 색과 투명도(알파 채널)를 사용
- L: 이미지를 흑백으로 표현
- 각 픽셀의 색상은 검은 색(0)부터 흰 색(255)까지의 값으로 표현
- CMYK: 색상을 시안(Cyan), 마젠타(Magenta), 노랑(Yellow), 검정(Black) 4가지 색으로 나타냄
- 주로 인쇄를 위한 이미지 파일에 사용
- 모드를 흑백(L)으로 변환
bw = img.convert("L")