note.nkmk.me

Python, OpenCVで画像ファイルの読み込み、保存(imread, imwrite)

Date: 2018-01-12 / tags: Python, OpenCV, 画像処理

PythonのOpenCVで画像ファイルを読み込み、保存する。cv2.imreadcv2.imwriteを使う。

NumPy配列ndarrayとして読み込まれる。

なお、OpenCVではなく画像処理ライブラリPillowを使って画像ファイルをndarrayとして読み込むこともできる。

例として以下の画像を使用する。

lena

スポンサーリンク

カラー(BGR)で読み込み、保存

cv2.imreadで画像ファイルから読み込み

行(高さ) x 列(幅) x 色(3)の三次元のndarrayとなる。

import cv2

im = cv2.imread('data/src/lena.jpg')

print(type(im))
# <class 'numpy.ndarray'>

print(im.shape)  # サイズ(高さ x 幅 x 色数)
# (225, 400, 3)

print(im.dtype)
# uint8

色の順番がRGBではなくBGRなので注意。例として0番目(B:青)と1番目(G:緑)を0(黒)にしてみる。

im[:, :, (0, 1)] = 0

lena red

BGRとRGBを変換したい場合は以下の記事を参照。

cv2.imsaveで画像ファイルに保存

ファイルのパスとndarrayオブジェクトを引数として指定する。

cv2.imwrite('data/dst/lena_opencv_red.jpg', im)

グレースケールで読み込み、保存

cv2.imreadで画像ファイルから読み込み

cv2.imreadの第二引数にcv2.IMREAD_GRAYSCALEを指定することで、カラーの画像ファイルをグレースケール(白黒)で読み込むことができる。cv2.IMREAD_GRAYSCALE0なので、0を指定してもOK。

エッジを検出したりするなど、色情報が必要ないときに便利。

この場合、行(高さ) x 列(幅)の二次元のndarrayとなる。

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)
# im_gray = cv2.imread('data/src/lena.jpg', 0)

print(type(im_gray))
# <class 'numpy.ndarray'>

print(im_gray.shape)  # サイズ(高さ x 幅)
# (225, 400)

print(im_gray.dtype)
# uint8

cv2.imsaveで画像ファイルに保存

保存するときはグレースケールでも特に指定する必要はなく、カラーの場合と同じくcv2.imsaveにファイルのパスとndarrayオブジェクトを引数として指定する。

cv2.imwrite('data/dst/lena_opencv_gray.jpg', im_gray)

lena gray

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事