OpenCV 비전 실무2장 · 이미지 입출력과 영상 시각화12 / 21← 이전목차다음 →MetaContents

2장. 이미지 입출력과 영상 시각화

결과를 그림 파일로 남기기

요리 대회에서 요리를 남기는 방법은 두 가지입니다. 하나는 요리 자체를 그릇째 냉장고에 넣어 두는 것입니다. 나중에 데워 다시 먹거나 다른 요리에 쓸 수 있습니다. 다른 하나는 요리를 차려 놓고 이름표와 함께 사진을 찍어 두는 것입니다. 보고서에 붙이기 좋지만 사진을 먹을 수는 없습니다. 영상 처리 결과를 남기는 방법도 이렇게 둘입니다.

배열의 숫자만 저장하는 cv2.imwrite 와 도화지 전체를 저장하는 fig.savefig 를 나란히 놓은 비교 그림

그림의 왼쪽 cv2.imwrite 는 배열의 숫자를 그대로 파일에 씁니다. 요리를 그릇째 넣어 두는 쪽입니다. 오른쪽 fig.savefig 는 제목, 여러 칸, 눈금이 들어간 도화지 전체를 그림으로 찍어 저장합니다. 이름표와 함께 찍은 사진 쪽입니다. 다음 처리에 다시 쓸 그림은 imwrite 로, 보고서나 수업 자료에 붙일 그림은 savefig 로 남깁니다.

savefig 의 값

값원래 말뜻
fig.savefig("out_ch02_x.png")save figure(도화지 저장)확장자(.png, .jpg, .pdf, .svg)대로 저장한다
dpi=120dots per inch1인치에 점 120개. 가로 9인치면 9 × 120 = 1,080픽셀
bbox_inches="tight"bounding box(둘레 상자) inches도화지 둘레의 빈 여백을 잘라 낸다

두 저장 견주기

견줄 것cv2.imwritefig.savefig
저장하는 것배열의 숫자도화지에 그려진 모습
크기(픽셀)배열과 똑같다figsize × dpi 로 정해진다
제목, 눈금, 여러 칸없다들어간다
다시 읽어 처리에 쓰기알맞다알맞지 않다
색 순서BGR 배열을 넣는다RGB 로 바꿔 그린 모습이 저장된다
Python
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("ch02_market.png")
fig, ax = plt.subplots(figsize=(4, 3))
ax.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax.axis("off")
# 도화지는 가로 4인치 × 100 = 400픽셀이지만, tight 로 둘레 여백을 잘라 더 작아진다
fig.savefig("out_ch02_savefig_demo.png", dpi=100, bbox_inches="tight")
back = cv2.imread("out_ch02_savefig_demo.png")
print("원본 배열:", img.shape, "/ savefig 그림:", back.shape)
plt.show()

주의할 점

  • fig.savefig 는 plt.show() 보다 먼저 부릅니다. 화면에 띄우고 나면 도화지가 비워져 빈 그림이 저장될 수 있습니다.
  • savefig 로 저장한 그림을 다시 읽어 처리에 쓰지 않습니다. 크기가 바뀌었고 제목과 여백까지 숫자로 들어 있습니다.
← 이전 절2장 · 확대해서 보기다음 절 →2장 · 실습 지도