Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 이미지 처리 기초: Pillow와 OpenCV로 배우는 실전 예제

파이썬은 이미지 처리를 위해 다양하고 강력한 라이브러리를 제공합니다. 목적에 따라 적합한 라이브러리를 선택하면 간단한 썸네일 제작부터 실시간 컴퓨터 비전까지 폭넓은 작업을 수행할 수 있습니다.

파이썬 대표 이미지 처리 라이브러리

  • 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()

실행 결과

파이썬 이미지 처리 기초: Pillow와 OpenCV로 배우는 실전 예제

위 코드의 변수 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()

실행 결과

파이썬 이미지 처리 기초: Pillow와 OpenCV로 배우는 실전 예제

원본 이미지가 지정한 최대 크기(300×300) 안에서 비율을 유지한 채 축소되는 것을 확인할 수 있습니다.

5. 그레이스케일 이미지로 변환 — convert()

컬러 이미지를 흑백(그레이스케일) 이미지로 변환하는 것도 매우 간단합니다. convert('L') 메서드를 사용하면 되는데, 여기서 'L'은 밝기(Luminance)를 의미합니다.

>>> TajMahal_gray = Image.open('TajMahal.jpg').convert('L')
>>> TajMahal_gray.show()

실행 결과

파이썬 이미지 처리 기초: Pillow와 OpenCV로 배우는 실전 예제

지금까지 살펴본 예제는 모두 파이썬의 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()

실행 결과

파이썬 이미지 처리 기초: Pillow와 OpenCV로 배우는 실전 예제

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로 배우는 실전 예제

마무리

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