[python] Matplotlib와 OpenCV를 함께 사용하기

Matplotlib와 OpenCV는 파이썬에서 데이터 시각화와 이미지 처리를 위한 두 가지 강력한 라이브러리입니다. 이 블로그 포스트에서는 Matplotlib와 OpenCV를 함께 사용하는 방법을 살펴보겠습니다.

1. Matplotlib를 사용한 이미지 표시

먼저, Matplotlib를 사용하여 이미지를 표시하는 방법을 알아보겠습니다. 아래는 예시 코드입니다.

import cv2
from matplotlib import pyplot as plt

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 이미지를 RGB로 변환
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 이미지 표시
plt.imshow(rgb_image)
plt.axis('off')
plt.show()

이 코드는 cv2.imread를 사용하여 이미지 파일을 읽고, cv2.cvtColor를 사용하여 BGR 형식의 이미지를 RGB로 변환합니다. 그런 다음 plt.imshow를 사용하여 이미지를 표시합니다. plt.axis('off')를 추가하면 x축과 y축 라벨을 제거할 수 있습니다. 마지막으로 plt.show를 호출하여 이미지를 보여줍니다.

2. OpenCV를 사용한 이미지 처리

이제 OpenCV를 사용하여 이미지 처리를 해보겠습니다. 아래는 예시 코드입니다.

import cv2

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 이미지를 회색조로 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 이미지 블러링
blurred_image = cv2.GaussianBlur(image, (9, 9), 0)

# 이미지를 이진화
ret, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# 이미지 표시
cv2.imshow('Gray Image', gray_image)
cv2.imshow('Blurred Image', blurred_image)
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

이 코드는 cv2.imread를 사용하여 이미지 파일을 읽고, cv2.cvtColor를 사용하여 BGR 형식의 이미지를 회색조로 변환합니다. 그런 다음 cv2.GaussianBlur를 사용하여 이미지에 블러링을 적용하고, cv2.threshold를 사용하여 이미지를 이진화합니다. 마지막으로 cv2.imshow를 사용하여 이미지를 표시하고, cv2.waitKey(0)를 사용하여 키 입력을 대기하고, cv2.destroyAllWindows()를 사용하여 모든 윈도우를 닫습니다.

3. Matplotlib와 OpenCV를 함께 사용하기

이제 Matplotlib와 OpenCV를 함께 사용하여 이미지를 표시하고 처리한 결과를 한 번에 확인해보겠습니다. 아래는 예시 코드입니다.

import cv2
from matplotlib import pyplot as plt

# 이미지 파일 로드
image = cv2.imread('image.jpg')

# 이미지를 RGB로 변환
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 이미지 회색조로 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 이미지 블러링
blurred_image = cv2.GaussianBlur(image, (9, 9), 0)

# 이미지 이진화
ret, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# Matplotlib를 사용하여 이미지 표시
fig, axs = plt.subplots(2, 2)

axs[0, 0].imshow(rgb_image)
axs[0, 0].axis('off')
axs[0, 0].set_title('Original Image')

axs[0, 1].imshow(gray_image, cmap='gray')
axs[0, 1].axis('off')
axs[0, 1].set_title('Gray Image')

axs[1, 0].imshow(blurred_image)
axs[1, 0].axis('off')
axs[1, 0].set_title('Blurred Image')

axs[1, 1].imshow(binary_image, cmap='gray')
axs[1, 1].axis('off')
axs[1, 1].set_title('Binary Image')

plt.tight_layout()
plt.show()

이 코드는 앞서 배운 Matplotlib와 OpenCV의 기능을 함께 사용하여 이미지를 표시합니다. fig, axs = plt.subplots(2, 2)를 사용하여 2x2 서브플롯을 생성하고, axs를 사용하여 각 서브플롯에 이미지를 표시합니다. cmap='gray'를 추가하여 회색조 이미지 표시에는 컬러맵을 설정합니다. 마지막으로 plt.tight_layout()을 사용하여 이미지들이 겹치지 않도록 레이아웃을 조정하고, plt.show()를 호출하여 이미지들을 보여줍니다.

위의 예시 코드를 실행하면, 원본 이미지, 회색조 이미지, 블러링 처리된 이미지, 이진화된 이미지를 한 번에 확인할 수 있습니다.

참고 자료