2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonでの画像読み込み -- skimageとcv2

Last updated at Posted at 2021-03-13

作成日:20210201
言語:Python

Pythonでの画像読み込みについて、skimage.io.imread関数とcv2.imread関数を調べた。

※Pythonの画像処理ライブラリには他にPillow(PIL)もありますが、この記事では触れていません。

##1. 参考リンク

1-1. scikit-imageでの画像読み込み (skimage.io.imread)

scikit-image公式ドキュメント
https://scikit-image.org/docs/dev/api/skimage.html
(ページ中程のUtility Functionsに画像読み込み関数のまとめあり。)

1-2. OpenCVでの画像読み込み (cv2.imread)

note.nkmk.me Python -- OpenCVで画像ファイルの読み込み、保存(imread, imwrite)
https://note.nkmk.me/python-opencv-imread-imwrite/

##2. scikit-image

2-1. 概要

読み込みはskimage.io.imread

データ型の変換は、
img_as_float(0~1までの浮動小数点数)、
img_as_uint(0~65535の整数=16ビット型)、
img_as_ubyte(0~255の整数=8ビット型)。

2-2. 注意 (自分用メモ)

今までskimageの画像読み込み・データ変換関数をよく知らずに、0~1に正規化する際にnp.float64((io.imread(fname))/255 などという書き方をしていたが、今後は避ける。この書き方だと bit depth を確認して正規化しないといけない(8-bitなら255、16-bitなら65535で割る)。それよりも、最初から img_as_floatを使った方が良い。

2-3. サンプルコード

read_img_skimage.py

import numpy as np
import matplotlib.pyplot as plt
from skimage import io,img_as_float, img_as_uint, img_as_ubyte

#
# Import test images
#
fname = '../test.tif'

### 画像のデータ型そのまま
print('raw image')
img = io.imread(fname)

## 画像情報
print(img.shape) # 画像の大きさ
print(img) # 画像が数値配列として表示される
print(type(img)) # numpy.ndarray
print(img.dtype) # これでbit depth を取得できる (今回は uint8 型でした)

## plot
plt.figure()
plt.imshow(img, cmap='gray')
plt.show()

### 0-1の浮動小数点型にする
print('img_as_float')
img_float = img_as_float(io.imread(fname))

# 【注意】
# np.float64((io.imread(fname))/255 という書き方は今後は避ける。
# これだと bit depth を確認して正規化しないといけない。8-bitなら255、16-bitなら65535で正規化しないといけない。
# 最初から img_as_float を使った方が良い。

print(img_float)
## plot
plt.figure()
plt.imshow(img_float, cmap='gray')
plt.show()

### 16-bit型、8-bit型にする
print('img_as_uint')
img_16bit = img_as_uint(io.imread(fname))
# img_8bit = img_as_ubyte(io.imread(fname))
print(img_uint)
print(img_uint.dtype)

3. OpenCV

3-1. 概要

画像の読み込みはcv2.imread

3-2. 注意 (自分用メモ)

openCVのcv2.imread関数はerrorを出さないので、読み込めなかった時のトラブルシューティングがちょっと面倒くさい(参考URL: https://note.nkmk.me/python-opencv-imread-imwrite/ )。

3-3. サンプルコード

read_img_cv2.py
import numpy as np
import matplotlib.pyplot as plt
import cv2

#
# Import test images
#
img_file='../test.tif'

img = cv2.imread( img_file, 0 )
print(img)

print(img.shape) # 画像の大きさ
print(type(img)) # <class 'numpy.ndarray'>
print(img.dtype) # uint8

#  【注意】
# openCVのcv2.imread関数はerrorを出さないので、読み込めなかった時のトラブルシューティングがちょっと面倒くさい
# 参考URL: https://note.nkmk.me/python-opencv-imread-imwrite/

plt.figure()
plt.imshow(img, cmap='gray')
plt.show()



__終わり__
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?