파이썬은 이미지 처리를 위해 다양하고 강력한 라이브러리를 제공합니다. 목적에 따라 적합한 라이브러리를 선택하면 간단한 썸네일 제작부터 실시간 컴퓨터 비전까지 폭넓은 작업을 수행할 수 있습니다.
파이썬 대표 이미지 처리 라이브러리
OpenCV — 실시간 컴퓨터 비전에 특화된 이미지 처리 라이브러리입니다. 2D·3D 특징 추출 도구, 얼굴 및 제스처 인식, 인간-컴퓨터 상호작용(HCI), 모바일 로봇공학, 객체 인식 등 매우 다양한 분야에서 활용됩니다.
Numpy & Scipy — 이미지를 배열 데이터로 다루며 조작과 수치 연산 처리를 담당하는 핵심 라이브러리입니다.
Scikit-image — 필터링, 세그먼테이션, 형태학적 변환 등 다양한 이미지 처리 알고리즘을 손쉽게 사용할 수 있게 해줍니다.
PIL(Python Imaging Library) — 썸네일 생성, 크기 조절, 회전, 서로 다른 파일 형식 간 변환 등 이미지의 기본적인 작업을 수행하는 데 유용합니다.
이 글에서는 파이썬으로 이미지를 처리하는 기본적인 방법을 단계별로 살펴보겠습니다.
1. 필요한 라이브러리 설치하기
가장 먼저 이미지 처리에 사용할 라이브러리를 설치해야 합니다. Pillow, OpenCV 등 원하는 라이브러리를 pip 명령어로 간단히 설치할 수 있습니다.
$pip install pillow
설치가 완료되면 바로 이미지를 자유롭게 다룰 준비가 된 것입니다.
2. 이미지 열기와 보여주기 — open(), show()
먼저 파일을 열고 화면에 출력해 보겠습니다. 아래 코드처럼 이미지를 열면서 동시에 회전시켜 표시할 수도 있습니다.
# 필요한 라이브러리 임포트
from PIL import Image
# 이미지 열기
im = Image.open("TajMahal.jpg")
# 이미지 회전 후 표시
im.rotate(45).show()실행 결과

위 코드의 변수 im은 Pillow 객체입니다. 이 객체를 통해 열린 이미지에 대한 다양한 정보를 확인할 수 있습니다.
>>> im <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1000x667 at 0x65AB990> >>> im.size (1000, 667) >>> im.format 'JPEG'
이처럼 이미지의 크기(size)와 파일 형식(format) 같은 메타 정보를 손쉽게 조회할 수 있습니다.
3. 이미지 형식 변환과 저장 — save()
Pillow를 사용하면 이미지 형식을 손쉽게 변환할 수 있습니다. 예를 들어 JPEG 이미지를 PNG로 저장하려면 다음과 같이 한 줄이면 충분합니다.
>>> im.save('TajMahal.png')명령 실행 후 폴더를 확인해 보면, 동일한 이미지가 두 가지 다른 형식(JPEG, PNG)으로 저장되어 있는 것을 볼 수 있습니다.
4. 이미지 크기 조절 — thumbnail()
Pillow의 thumbnail() 메서드를 사용하면 이미지 크기를 간편하게 줄일 수 있습니다.
>>> im.thumbnail((300, 300)) >>> im.show()
실행 결과

원본 이미지가 지정한 최대 크기(300×300) 안에서 비율을 유지한 채 축소되는 것을 확인할 수 있습니다.
5. 그레이스케일 이미지로 변환 — convert()
컬러 이미지를 흑백(그레이스케일) 이미지로 변환하는 것도 매우 간단합니다. convert('L') 메서드를 사용하면 되는데, 여기서 'L'은 밝기(Luminance)를 의미합니다.
>>> TajMahal_gray = Image.open('TajMahal.jpg').convert('L')
>>> TajMahal_gray.show()실행 결과

지금까지 살펴본 예제는 모두 파이썬의 PIL(Pillow) 라이브러리를 활용한 것입니다. 물론 OpenCV, Matplotlib, Numpy 같은 라이브러리를 함께 사용하면 훨씬 더 강력한 이미지 처리가 가능합니다. 아래에서 OpenCV를 활용한 예제를 소개합니다.
6. OpenCV로 그레이스케일 이미지 표시하기
OpenCV의 cv2.imread() 함수에 cv2.IMREAD_GRAYSCALE 옵션을 지정하면 이미지를 읽는 동시에 흑백으로 변환할 수 있습니다.
# 필요한 라이브러리 임포트
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 그레이스케일 모드로 이미지 읽기
im = cv2.imread('TajMahal.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image', im)
cv2.waitKey(0)
cv2.destroyAllWindows()실행 결과

7. Matplotlib으로 이미지 시각화하고 선 그리기
같은 작업을 Matplotlib으로 구현하면 이미지 위에 좌표축 눈금을 숨기거나 선을 직접 그리는 등 더 세밀한 시각화가 가능합니다.
import cv2
import numpy as np
from matplotlib import pyplot as plt
im = cv2.imread('TajMahal.jpg', cv2.IMREAD_GRAYSCALE)
plt.imshow(im, cmap='gray', interpolation='bicubic')
# X축과 Y축의 눈금 값 숨기기
plt.xticks([]), plt.yticks([])
# 이미지 위에 청록색 선 그리기
plt.plot([200, 300, 400], [100, 200, 300], 'c', linewidth=5)
plt.show()실행 결과

마무리
파이썬은 Pillow만으로도 이미지 열기, 회전, 저장, 크기 조절, 그레이스케일 변환 같은 기본 작업을 몇 줄의 코드로 처리할 수 있습니다. 여기에 OpenCV와 Matplotlib을 더하면 객체 인식이나 실시간 영상 처리 같은 고급 작업까지 확장할 수 있으니, 프로젝트의 목적에 맞는 라이브러리를 선택해 활용해 보시기 바랍니다.