2장. 이미지 입출력과 영상 시각화
화면에 띄우는 두 길
사진을 보여 주는 방법은 두 가지가 있습니다. 하나는 사진 한 장을 액자에 넣어 벽에 거는 것입니다. 손님이 보고 "다 봤다"고 말할 때까지 걸어 둡니다. 다른 하나는 앨범에 여러 장을 붙이고 사진마다 설명을 적는 것입니다. 앨범은 그대로 복사해 다른 사람에게 줄 수도 있습니다. OpenCV 의 cv2.imshow 가 액자, Matplotlib 이 앨범입니다.
그림의 왼쪽은 새 창을 띄우는 cv2.imshow, 오른쪽은 Matplotlib 입니다. 여기서 액자를 걸어 두는 시간이 cv2.waitKey 이고, 앨범의 설명이 Matplotlib 의 제목입니다. 이 과정은 오른쪽 길을 씁니다. VS Code 의 노트북이나 원격 환경에서는 새 창이 뜨지 않을 수 있고, 여러 장과 제목을 한 그림에 담기도 Matplotlib 이 쉽기 때문입니다.
cv2.imshow 의 생김새
아래는 실행하지 않은 안내 코드입니다. 창을 띄우는 코드라 교안의 자동 실행에는 넣지 않았습니다. 내 PC 의 VS Code 에서 파이썬 파일로 실행하면 창이 뜹니다.
import cv2
img = cv2.imread("ch02_market.png")
cv2.imshow("market", img) # imshow = image show. "market" 이라는 이름의 창에 그림을 띄운다
key = cv2.waitKey(0) # 키를 누를 때까지 기다린다. 0 = 끝없이. 1000 이면 1초(밀리초 단위)
print("누른 키 번호:", key)
cv2.destroyAllWindows() # 띄운 창을 모두 닫는다두 길 견주기
| 견줄 것 | cv2.imshow | Matplotlib (plt.imshow) |
|---|---|---|
| 색 순서 | BGR 그대로 넣는다 | RGB 로 바꿔 넣는다 |
| 보이는 곳 | 새 창 | 노트북 칸, 그림 창, 그림 파일 |
| 기다리기 | cv2.waitKey 가 꼭 있어야 한다 | 필요 없다 |
| 여러 장, 제목, 눈금 | 창을 여러 개 띄워야 한다 | 한 도화지에 칸을 나눠 넣는다 |
| 쓰는 때 | 웹캠처럼 계속 바뀌는 화면 (15장) | 처리 전후 견주기, 보고서 그림 |
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("ch02_market.png")
# Matplotlib 은 RGB 순서로 읽으므로 바꿔서 넣는다
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("장터 진열대")
plt.axis("off")
plt.show()주의할 점
cv2.imshow뒤에cv2.waitKey가 없으면 창이 그려지지 않거나 곧바로 닫힙니다.cv2.imshow에는 BGR 그림을 그대로 넣습니다. RGB 로 바꿔 넣으면 거꾸로 빨강과 파랑이 뒤바뀝니다.