Python matplotlib : imread, imshow (png 이미지를 읽어서 출력하기)
matplotlib는 굉장히 재미있는 기능들을 제공하는데 그 중에선 image 파일을 읽어서 그래프로 나타내주는 기능을 제공합니다.
제가 이전에 먹었던 녹차빙수 사진을 한번 matplotlib를 이용해서 그래프 위에 나타내보겠습니다.
import matplotlib.pyplot as plt
import matplotlib.image as img
img_test = img.imread('greentea_ice_flakes.png')
plt.imshow(img_test)
plt.show()
directory 구조는 위와 같습니다.
pyplot.py 파일에 위 예시코드가 적혀있으며
greentea_ice_flakes.png 파일이 바로 제가 먹었던 녹차빙수 사진입니다.
- img_test = img.imread('greentea_ice_flakes.png')
matplotlib.image.img에서 imread method를 이용해 이미지를 읽어옵니다.
- plt.imshow(img_test)
- plt.show()
그리고 image를 표시해줍니다.
(imshow method만으로는 좌표평면이 표시되는 결과 창이 나타나지 않을 수 있으므로 이런 경우 show method를 추가로 사용해줍시다.)
예시 코드를 실행하면 위 캡쳐 이미지처럼 저의 빙수 사진이 좌표평면 위에 표시됩니다.
이렇게 imshow는 image 파일의 정보를 받아서 그것을 좌표평면 위에 표시해줍니다.
https://cosmosproject.tistory.com/414
원리는 위 링크에 있는 내용과 비슷하다고 보시면 됩니다.
이미지의 픽셀별 색상을 체크하고 각 픽셀의 색상을 좌표평면 위에 표시해주는 것입니다.
import matplotlib.pyplot as plt
from PIL import Image
img_test = Image.open('greentea_ice_flakes.png')
plt.imshow(img_test)
plt.show()
사실 maplotlib의 imshow method는 parameter로서 이미지 객체를 받으면 됩니다.
따라서 matplotlib.image를 이용하지 않고 PIL의 Image를 이용하여 image를 읽어와도 됩니다.
이미지 객체를 만들어서 imshow method의 parameter로 전달하기만 하면 되니까, 위 코드처럼 어떻게든 이미지를 읽어와서 imshow에 전달하면 그것을 좌표평면 위에 나타낼 수 있죠.
결과는 동일합니다.
import matplotlib.pyplot as plt
import matplotlib.image as img
img_test = img.imread('greentea_ice_flakes.png')
plt.imshow(img_test)
plt.savefig('result_ice_flakes.png',
facecolor='#eeeeee',
edgecolor='black',
format='png', dpi=200)
또한 위처럼 savefig method를 이용하면 좌표평면에 나타낸 이미지를 다시 png파일로 저장할 수 있습니다.
그 결과는 아래와 같습니다.