[OpenCV] OpenCV를 이용한 실습 (Matplotlib을 사용하여 불러오기)
업데이트:
OpenCV를 이용한 실습 (Matplotlib을 사용하여 불러오기)
개요
이번 포스팅에서는 Python의 Matplotlib 라이브러리를 활용해 컬러 사진과 흑백 사진을 출력하는 방법을 알아봅니다.
또한, 두 가지 이미지를 동시에 출력하는 방법도 소개합니다.
1. Matplotlib 설치
OpenCV와 함께 Matplotlib을 사용하려면 Matplotlib 패키지를 설치해야 합니다.
pip install matplotlib
2. 컬러 영상 출력하기
컬러 영상을 출력하려면 영상 데이터가 RGB 순서여야 합니다.
하지만 cv2.imread()로 이미지를 불러오면 BGR 순서로 불러오기 때문에, cv2.cvtColor()를 사용하여 BGR을 RGB로 변환합니다.
2-1. 컬러 영상 출력 코드
import matplotlib.pyplot as plt
import cv2
# 컬러 영상 읽기 및 BGR -> RGB 변환
imgBGR = cv2.imread('cat.bmp')
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
plt.axis('off') # 눈금 제거
plt.imshow(imgRGB)
plt.show()
3. 그레이스케일 영상 출력하기
plt.imshow() 함수에서 컬러맵을 설정하여 그레이스케일 영상을 출력합니다.
- 컬러맵 설정:
cmap='gray'
3-1. 그레이스케일 영상 출력 코드
import matplotlib.pyplot as plt
import cv2
# 그레이스케일 영상 읽기
imgGray = cv2.imread('assets/cat.bmp', cv2.IMREAD_GRAYSCALE)
plt.axis('off')
plt.imshow(imgGray, cmap='gray')
plt.show()
4. 컬러와 그레이스케일 영상을 함께 출력하기
Matplotlib의 plt.subplot()을 사용하여 두 개의 영상을 동시에 출력할 수 있습니다.
4-1. 컬러와 그레이스케일 영상 동시 출력 코드
import matplotlib.pyplot as plt
import cv2
# 컬러 및 그레이스케일 영상 읽기
imgBGR = cv2.imread('cat.bmp')
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
imgGray = cv2.imread('assets/cat.bmp', cv2.IMREAD_GRAYSCALE)
plt.subplot(121), plt.axis('off'), plt.imshow(imgRGB)
plt.subplot(122), plt.axis('off'), plt.imshow(imgGray, cmap='gray')
plt.show()
5. 전체 코드
아래는 위의 모든 과정을 포함한 전체 코드입니다.
import matplotlib.pyplot as plt
import cv2
# 컬러 영상 출력
imgBGR = cv2.imread('assets/cat.bmp')
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
plt.axis('off')
plt.imshow(imgRGB)
plt.show()
# 그레이스케일 영상 출력
imgGray = cv2.imread('assets/cat.bmp', cv2.IMREAD_GRAYSCALE)
plt.axis('off')
plt.imshow(imgGray, cmap='gray')
plt.show()
# 두 개의 영상을 함께 출력
plt.subplot(121), plt.axis('off'), plt.imshow(imgRGB)
plt.subplot(122), plt.axis('off'), plt.imshow(imgGray, cmap='gray')
plt.show()
6. 결과
컬러 영상 출력 결과
그레이스케일 영상 출력 결과
컬러와 그레이스케일 영상을 함께 출력한 결과
결론
Matplotlib과 OpenCV를 활용하면 다양한 방식으로 이미지를 출력할 수 있습니다.
이번 포스팅에서 다룬 방법을 응용하여 더 나은 데이터 시각화를 시도해보세요!
댓글남기기