본문 바로가기

프로그래밍

🌱 Python Matplotlib에서 연속적인 이미지 그리기 (clear)

🌱 Introduction

Jupyter NoteBook 에서 연속적인 이미지를 출력하고 싶은 경우가 간혹 있습니다. Animation효과를 주기 위해서 matplotplib의 animation을 사용할 수도 있지만, 단순히 이미지를 출력하고 지우고 다시 그리고 싶은 경우, 굳이 애니메이션까지 만들 필요가 없습니다. Python으로 이미지를 지우고 그리는 코드를 공유합니다.

🌱 Code

import numpy as np 
import matplotlib.pyplot as plt 
from IPython import display 

for i in range(100):
    array = np.random.random(size=(10,10,3))
    display.clear_output(wait=True)
    display.display(plt.gcf())
    plt.imshow(array)      

(1) 이미지에 해당하는 배열을 준비합니다. 3D(shape=(X,Y,Z)), 2D(shape=(X,Y))여도 가능합니다. 다음으로

(2) display에서 이미지를 지워줍니다. 이미지를 생성하기 전에 지워주는 이유는 생성되고 바로 지우는 경우보다, 생성되기 전에 비워주는 느낌입니다.

(3) 현재 figure에 대한 정보를 줍니다. (plt. get current figure)

(4) plt.imshow()로 이미지를 그립니다.

🌱 Discussion

display.clear_output(wait=False)로 기다리지 않는 경우, 이미지가 렌더링되기 전에 지워버려서 이미지를 볼 수가 없습니다. 렌더링은 이미지가 클수록 오래 걸리므로 이 코드를 사용하면 프로그램 자체가 느려질 수 있습니다. 따라서 시뮬레이션을 돌리면서 이미지를 볼 필요가 없는 경우, 이미지를 저장하는 방식으로 구현을 하셔야 합니다. (렌더링이 진짜 느림 ㅠ_ㅠ)

🌱 Result

3D 이미지에 대한 출력

https://github.com/fxnnxc 

 

fxnnxc - Overview

HelloWorld! fxnnxc has 30 repositories available. Follow their code on GitHub.

github.com