화소(pixel)
: 색상을 가진 화면을 구성하는 최소 단위의 점이며, RGB
강도를 조절하여 색상 표현
RGB
: Red
, Green
, Blue
컬러 스페이스(color space, 색 공간)
: 색을 표현하는 방식. 채널
로 구성되어 있다.
래스터(raster)
, 비트맵(bitmap)
: 각 점의 색상 값을 저장하는 방식.
각 색상별 8비트를 사용하여 0~255
값으로 색의 감도 표시
벡터(vector)
: 점과 선의 위치를 방적식으로 기록 → 확대, 축소에 따라 각 화소에 어떻게 표현될 지 재계산 → 깨지지 않음
YUV
방식: 흑백 채널에 1/4의 해상도를 가진 두 색상 채널을 덧붙임
HSV(Hue 색상, Saturation 채도, Value 명도)
CMYK(Cyan, Magenta, Yellow, Black)
: 각 색을 조합하여 검은색을 표현하는 것이 낭비가 심하다. 그럴 때 RGB 대신 사용하면 좋다.
JPEG
: 근처 화소들끼리 묶어 이미지 압축 → 색상 정보 손실 → 재압축이 일어나면 디지털 풍화 발생
PNG
: 색상 손실 없이 이미지 압축 (사용된 색상을 정의해두었다가 추후에 참조) → 사용 색상에 따라 용량 결정
GIF
: 이미지 내 여러 프레임을 둔다 → 손실 X, 하지만 256개의 색상만 기억
Numpy와 결합하여 간편하게 이미지 작업을 할 수 있다.
PIL
: Python Image Library
이미지
는 배열
형태 데이터.# numpy, pillow import
import numpy as np
from PIL import Image
# 32x32 검은 이미지
data = np.zeros([32, 32, 3], dtype=np.uint8)
image = Image.fromarray(data, 'RGB')
# 빨간 이미지
data[:, :] = [255, 0, 0]
image = Image.fromarray(data, 'RGB')
PIL.Image.fromarray()
: 이미지로 변환
np.zeros()
: 배열 초기화 (배열을 0으로 채움)
from PIL import Image
import os
# 연습용 파일 경로
image_path = os.getenv('HOME')+'파일경로'
# 이미지 열기
img = Image.open(image_path)
# width와 height 출력
print(img.width)
print(img.height)
# JPG 파일 형식으로 저장해보기
new_image_path = os.getenv('HOME')+'파일 경로
img = img.convert('RGB')
img.save(new_image_path)
# 이미지 크기 변경하기
resized_image = img.resize((100,200))
# 저장하기
resized_image_path = os.getenv('HOME')+'이미지 파일 경로
resized_image.save(resized_image_path)
# 이미지의 부분만 크롭하기
# 크롭할 부분의 좌표
box = (300, 100, 600, 400)
region = img.crop(box)
오픈소스로 제공되는 컴퓨터 비전용 라이브러리.
영상 처리에 대한 다양한 기능 구현
OpenCV
에서는 RGB가 아닌 BGR 순서
사용
imread
: 파일로부터 이미지를 읽어와 반환해 주는 함수
cvtColor
: 컬러 스페이스 변환(convert) 함수
cv.inRange()
: img 를 변환한 hsv에다가 이 기준들를 적용하여, 해당하는 픽셀들에는 1, 그렇지 않은 픽셀들에는 0을 찍어놓은 배열을 반환
히스토그램
: 이미지에서 픽셀 별 색상 값의 분포
# opencv python, matplotlib 설치
$ pip install opencv-python matplotlib
OpenCV
의 compareHist()
함수를 사용하여 입력 이미지와 검색 대상 이미지의 히스토그램 간 유사도를 계산프로그램 실행
build_histogram_db()
입력된 이미지 이름에 해당하는 히스토그램을 입력 이미지로 선택하여 target_histogram
로 변수명 지정
search()
target_histogram
와 histogram_db
를 입력으로 받기OpenCV
의 compareHist()
함수를 사용하여 입력 이미지와 검색 대상 이미지의 히스토그램 간 유사도를 계산고른 이미지 표시
프로그램 종료