소스 뷰어
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 이미지 읽기 (컬러 이미지, 기본적으로 BGR 형식으로 읽음)
img_color_bgr = cv2.imread('example.jpg')
# OpenCV를 사용한 그레이스케일 변환
img_gray_opencv = cv2.cvtColor(img_color_bgr, cv2.COLOR_BGR2GRAY)
# NumPy를 사용해 가중치를 부여하여 그레이스케일 변환
blue_channel = img_color_bgr[:, :, 0]
green_channel = img_color_bgr[:, :, 1]
red_channel = img_color_bgr[:, :, 2]
# 가중치를 사용한 그레이스케일 변환 (0.299*R + 0.587*G + 0.114*B)
img_gray_weighted = (0.114 * blue_channel + 0.587 * green_channel + 0.299 * red_channel).astype(np.uint8)
# NumPy를 사용해 단순 평균으로 그레이스케일 변환 ((R + G + B) / 3)
img_gray_mean = (blue_channel/3.0 + green_channel/3.0 + red_channel/3.0).astype(np.uint8)
# 이미지들을 비교하여 출력
plt.figure(figsize=(12, 8))
# 1. 컬러 이미지 출력
plt.subplot(2, 2, 1)
plt.imshow(cv2.cvtColor(img_color_bgr, cv2.COLOR_BGR2RGB)) # BGR을 RGB로 변환하여 출력
plt.title('Original Color Image')
plt.axis('off')
# 2. OpenCV Grayscale 변환 이미지 출력
plt.subplot(2, 2, 2)
plt.imshow(img_gray_opencv, cmap='gray')
plt.title('OpenCV Grayscale')
plt.axis('off')
# 3. NumPy 가중치 그레이스케일 변환 이미지 출력
plt.subplot(2, 2, 3)
plt.imshow(img_gray_weighted, cmap='gray')
plt.title('NumPy Weighted Grayscale (0.299*R + 0.587*G + 0.114*B)')
plt.axis('off')
# 4. NumPy 단순 평균 그레이스케일 변환 이미지 출력
plt.subplot(2, 2, 4)
plt.imshow(img_gray_mean, cmap='gray')
plt.title('NumPy Mean Grayscale (R/3 + G/3 + B/3)')
plt.axis('off')
# 그래프 보여주기
plt.tight_layout()
plt.show()