1장. AI 비전과 OpenCV 개발환경
실습 4 — Matplotlib 으로 그림 띄우기
읽은 그림을 Matplotlib 으로 화면에 보여 줍니다. BGR 그림을 그대로 보여 주면 색이 뒤바뀌는 것을 직접 보고, 바로잡는 법을 익힙니다. 흑백 그림을 보여 줄 때 붙여야 하는 옵션도 봅니다.
1단계. 그래프 글꼴 정하고 읽기
import cv2
import matplotlib.pyplot as plt
# 그래프의 한글이 깨지지 않게 맑은 고딕을 쓰고, 빼기 기호가 네모로 나오지 않게 한다
plt.rcParams["font.family"] = "Malgun Gothic"
plt.rcParams["axes.unicode_minus"] = False
img = cv2.imread("fruit_stand.png")
# cv2.cvtColor(그림, 바꿀 방향): convert color. BGR 순서를 RGB 순서로 바꾼다
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print("사과 가운데, BGR 그림:", img[140, 80])
print("사과 가운데, RGB 그림:", rgb[140, 80])사과 가운데, BGR 그림: [ 40 40 210]
사과 가운데, RGB 그림: [210 40 40]2단계. 색이 뒤바뀌는 것 보기
# 1행 2열로 그림 두 개를 나란히 놓는다. figsize 는 (가로, 세로) 인치
fig, axes = plt.subplots(1, 2, figsize=(9, 3.6))
# plt.imshow 는 숫자 세 개를 R, G, B 순서로 읽는다. BGR 그림을 그대로 넣으면 빨강과 파랑이 바뀐다
axes[0].imshow(img)
axes[0].set_title("BGR 그대로 넣음 (색이 뒤바뀜)")
axes[1].imshow(rgb)
axes[1].set_title("RGB 로 바꿔 넣음 (제 색)")
for ax in axes:
ax.axis("off") # 눈금과 테두리를 숨긴다
plt.tight_layout() # 그림 사이 간격을 알맞게 맞춘다
plt.show()
3단계. 흑백 그림 띄우기
# cv2.IMREAD_GRAYSCALE: 읽으면서 흑백으로 바꾼다. 채널이 없어져 (세로, 가로) 모양이 된다
gray = cv2.imread("fruit_stand.png", cv2.IMREAD_GRAYSCALE)
print("흑백 그림의 모양:", gray.shape)
fig, axes = plt.subplots(1, 2, figsize=(9, 3.6))
# cmap(colormap, 색 지도)을 주지 않으면 숫자 크기에 따라 보라~노랑의 색을 입힌다
axes[0].imshow(gray)
axes[0].set_title("cmap 없음 (가짜 색)")
# cmap="gray" 를 주면 0 은 검정, 255 는 흰색으로 보인다
axes[1].imshow(gray, cmap="gray")
axes[1].set_title('cmap="gray" (흑백)')
for ax in axes:
ax.axis("off")
plt.tight_layout()
plt.show()흑백 그림의 모양: (240, 320)
코드 설명
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)는 칸마다 숫자 세 개의 순서를 뒤집습니다. 사과 칸[40 40 210]이[210 40 40]이 됩니다.plt.imshow는 image show(그림 보여 주기)의 줄임이고, 숫자를 R, G, B 순서로 읽습니다. 그래서 OpenCV 로 읽은 그림은 꼭 RGB 로 바꿔서 넣습니다.cv2.IMREAD_GRAYSCALE로 읽은 흑백 그림은 모양이 (240, 320) 으로, 채널 칸이 없습니다.- 흑백 그림은
cmap="gray"를 줘야 흑백으로 보입니다. 주지 않으면 Matplotlib 의 기본 색 지도(viridis)가 숫자에 가짜 색을 입힙니다.