目次
画像データロード
– IPythonで画像データを表示
OpenCV
– cv型データを読み込み
– cv型データを表示
– Matplotlibでcv型データを表示
– cv型データ→pil型の変換
– cv型データ→sk型の変換
Pillow
– pil型データを読み込み
– pil型データを表示
– io.BytesIOでpil型データを表示
– Matplotlibでpil型データを表示
– pil型データ→cv型の変換
skimage
– sk型データを読み込み
– sk型データを表示
– Matplotlibでsk型データを表示
– sk型データ→cv型の変換
– sk型データ→pil型の変換
Matplotlib
– Matplotlib型データを読み込み
– Matplotlib型データを表示
PythonはOpencv、Pillow、 scikit-image、Matplotlibなどの複数便利なライブラリがあります。各ライブラリはデータ型が違います。今回の記事は画像データお互い変換をまとめたいと思います。それぞれのライブラリで特徴があります。
実験の環境は google colabです。
画像データロード
# 画像をロード import urllib import urllib.request img_src = “https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Origami_cranes_on_match_heads.jpg/320px-Origami_cranes_on_match_heads.jpg” img_file = ‘image.jpg’ urllib.request.urlretrieve(img_src, img_file) |
(‘image.jpg’, <http.client.HTTPMessage at 0x7fbef83dc358>)
– IPythonで画像データを表示
# IPython show image from IPython.display import Image Image(‘image.jpg’) |
OpenCV
– cv型データを読み込み
import numpy as np import cv2 # Load an color image cv_img = cv2.imread(‘image.jpg’,1) |
– cv型データを表示
from google.colab.patches import cv2_imshow cv_img = cv2.imread(‘image.jpg’,1) cv2_imshow(cv_img) |
– Matplotlibでcv型データを表示
# Matplotlibで画像データを表示 import cv2 import matplotlib.pyplot as plt def show_im(img): plt.axis(‘off’) show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img) plt.show() show_im(cv_img) |
– cv型データ→pil型の変換
from PIL import Image import cv2 def cv2pil(image): ”’ OpenCV型 -> PIL型 ”’ new_image = image.copy() if new_image.ndim == 2: # モノクロ pass elif new_image.shape[2] == 3: # カラー new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB) elif new_image.shape[2] == 4: # 透過 new_image = cv2.cvtColor(new_image, cv2.COLOR_BGRA2RGBA) new_image = Image.fromarray(new_image) return new_image cv_img = cv2.imread(‘image.jpg’,1) pil_img = cv2pil(cv_img) |
– cv型データ→sk型の変換
from skimage.util import img_as_float cv_img = cv2.imread(‘image.jpg’,1) sk_image = img_as_float(cv_img) sk_image = sk_image[:, :, ::-1] # convert image from BGR (opencv) to RGB (skimage) |
Pillow
– pil型データを読み込み
from PIL import Image pil_img = Image.open(“image.jpg”) |
– pil型データを表示
pil_img |
– io.BytesIOでpil型データを表示
# io.BytesIOで作ったバッファに保存し、そのバッファをIPython.display.Imageで表示する。 import io from IPython.display import Image buf = io.BytesIO() pil_img.save(buf,”PNG”) data = buf.getvalue() Image(‘image.jpg’) |
– Matplotlibでpil型データを表示
# matplotlibとmatplotlibで表示する。 import matplotlib.pyplot as plt import numpy as np plt.imshow(np.array(pil_img)) plt.axis(‘off’) plt.show() |
– pil型データ→cv型の変換
from PIL import Image def pil2cv(image): ”’ PIL型 -> OpenCV型 ”’ new_image = np.array(image, dtype=np.uint8) if new_image.ndim == 2: # モノクロ pass elif new_image.shape[2] == 3: # カラー new_image = cv2.cvtColor(new_image, cv2.COLOR_RGB2BGR) elif new_image.shape[2] == 4: # 透過 new_image = cv2.cvtColor(new_image, cv2.COLOR_RGBA2BGRA) return new_image cv_img = pil2cv(pil_img) |
skimage
– sk型データを読み込み
from skimage import io sk_img = io.imread(‘image.jpg’) |
– sk型データを表示
from skimage import io from matplotlib import pyplot as plt io.imshow(sk_img) plt.axis(‘off’) plt.show() |
– Matplotlibでsk型データを表示
# Matplotlibでsk型データを表示 import matplotlib.pyplot as plt def show_image(image, title=’Image’, cmap_type=’gray’): plt.imshow(image, cmap=cmap_type) plt.title(title) plt.axis(‘off’) show_image(sk_img, ‘sk_img’); |
– sk型データ→cv型の変換
sk型では、numpyのようにデータがはいっています。そのためBGR形式ならば変更
必要です。
from skimage import img_as_ubyte cv_img = img_as_ubyte(sk_img) cv_img = cv_img[:, :, ::-1] # convert image from RGB (skimage) to BGR (opencv) |
– sk型データ→pil型の変換
sk型からPill型は、バイト列に変換する必要があります。
from skimage import io import matplotlib.pyplot as plt from PIL import Image sk_img = io.imread(‘image.jpg’) pil_img = Image.fromarray(np.uint8(sk_img)) |
Matplotlib
– Matplotlib型データを読み込み
import matplotlib.pyplot as plt mp_img = plt.imread(‘image.jpg’) |
import matplotlib.image as mpimage mp_img = mpimage.imread(‘image.jpg’) |
- Matplotlib型データを表示
mp_img = plt.imread(‘image.jpg’) plt.imshow(mp_img) plt.axis(‘off’) plt.show() |
参照の資料:
https://docs.opencv.org/master/
https://pillow.readthedocs.io/en/stable/
https://scikit-image.org/docs/stable/
https://matplotlib.org/3.3.3/contents.html
担当者:HM
香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属