파이썬을 사용한 기계 학습으로 자주 나오는 이미지 로드/드로잉 처리

이미지 로드



이하와 같이 디렉토리내의 화상 파일 패스를 배열로 읽어 놓아 사용하는 것이 많다.
# globで対象ファイルパスを読み込み、sortedで並び替えている
train_images_path_list = sorted(glob('./input/train_images/*.jpg'))

이미지의 로드에는 대체로 Pillow나 OpenCV가 사용된다.
로드 후는 Pillow는 독자 형식, OpenCV는 numpy.ndarray형이 된다.
numpy에 의해 Pillow의 독자 형식의 형태도 numpy.ndarray형으로 변환 가능.
import cv2

image = cv2.imread(train_images_path_list[0])
print(type(image))
# => numpy.ndarray

from PIL import Image
import numpy as np

image = Image.open(train_images_path_list[0])
print(type(image))
# => (jpeg形式のファイルの場合)PIL.JpegImagePlugin.JpegImageFile
print(type(np.array(image)))
# => numpy.ndarray

이미지 표시



이미지의 묘화는 대체로 matplotlib.pyplot가 사용된다.
Pillow 독자 형식도 numpy.ndarray형도 모두 imshow로 그릴 수 있다. 다만, 색의 취급이 다르기 때문에 주의가 필요.

Pillow를 사용하는 경우


import matplotlib.pyplot as plt
from PIL import Image

image = Image.open(train_images_path_list[0])

plt.imshow(image)



OpenCV를 사용하는 경우



OpenCV는 색 취급에 주의가 필요.
numpy.ndarray 형은 1계층째:폭, 2계층째: 높이, 3계층째: 색으로서 값이 격납되어 있다.
주의해야 할 것은 3 계층의 색으로 OpenCV는 BGR, Pillow는 RGB 순으로 값을 저장하고 있으며,
matplotlib.pyplot은 RGB로 색상을 인식하므로 OpenCV에서 읽은 경우 색상 변환이 필요합니다.
import matplotlib.pyplot as plt
import cv2

image = cv2.imread(train_images_path_list[0])
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

plt.imshow(image)

여러 장 표시



복수장 표시하고 싶은 경우는 이하와 같이 subplots 메소드로 axes를 생성해, 각 axes의 imshow에 numpy.ndarray(혹은 pillow독자형)를 건네준다.
from PIL import Image
import matplotlib.pyplot as plt

# 3*3 =9枚の画像を描画したい場合
ROWS = 3
COLS = 3
fig, axes = plt.subplots(nrows=ROWS, ncols=COLS, figsize=(15, 10))
for row in range(ROWS):
  for col in range(COLS):
    file = train_images_path_list[(row * COLS) + col]
    image = Image.open(file)
    axes[row][col].imshow(image)
    axes[row][col].set_title(file)

plt.show()

좋은 웹페이지 즐겨찾기