PythonのOpenCVで画像ファイルを読み込み、保存する方法を紹介します。
ここではcv2.imread()とcv2.imwrite()を使い、画像ファイルをNumPy配列のndarrayとして読み込み、ndarrayを画像ファイルとして保存します。
また、カラー画像とモノクロ画像で取り扱いが異なるので分けて説明します。
関数と主な引数
cv2.imread(path, flags=cv2.IMREAD_COLOR)
path | 画像ファイルのパス、文字列 |
flags | 画像ファイルの読み込み方法、デフォルトはカラー読み込み <引数一例> cv2.IMREAD_COLOR: カラーで読み込み cv2.IMREAD_GRAYSCALE: モノクロで読み込み |
cv2.imwrite(filename, image)
filename | 出力する画像のファイル名、.jpg, .pngなどのファイル形式を含めて指定する |
image | 出力する画像データ、ndarrayなど |
カラー画像で読み込み・保存
cv2.imread()で画像ファイルから読み込み
こちらの風景写真を例に、読み込み・保存を行う。
以下のように、カラー画像を読み込むと、高さ x 幅 x 色(チャネル) の3次元のndarrayが返される。これをmatplotlibで表示しようとすると、色彩が異なっている。これは、OpenCVが色(チャネル)をBGRの順でndarrayに読み込んでいる一方で、matplotlibはRGBの順のndarrayを想定しているからである。
Code:
import cv2
import matplotlib.pyplot as plt
# pathを設定
path = './pic/landscape.jpg'
# カラー画像として読み込み
img = cv2.imread(path)
# 型を確認
print(f'type: {type(img)}')
# 次元を確認
print(f'shape: {img.shape}')
# 読み込んだ画像を表示
plt.imshow(img)
plt.show()
Output:
type: <class 'numpy.ndarray'> shape: (600, 800, 3)
cv2.cvtColor()メソッドで第二引数にcv2.COLOR_BGR2RGBを指定することで、BGR→RGBに変換することができる。
Code:
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
Output:
cv2.imwrite()で画像ファイルを保存
cv2.imwrite()による保存は簡単で、以下のとおりである。
Code:
cv2.imwrite('./pic/landscape.png', img)
モノクロ画像で読み込み・保存
cv2.imread()で画像ファイルから読み込み
続いて、先ほどの風景写真をモノクロ画像として読み込むと、高さ x 幅 の2次元のndarrayが返される。ここでは、cv2.imread()の第二引数にcv2.IMREAD_GRAYSCALEを指定している。matplotlibでの表示の際も、plt.imshow()の引数にcmap=plt.cm.grayを指定して、モノクロ画像として表示している。これらの結果は、モノクロの画像ファイルを読み込んだ場合も同様となる。
Code:
import cv2
import matplotlib.pyplot as plt
# pathを設定
path = './pic/landscape.jpg'
# モノクロ画像として読み込み
img_gray = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
# 型を確認
print(f'type: {type(img_gray)}')
# 次元を確認
print(f'shape: {img_gray.shape}')
# 読み込んだ画像を表示
plt.imshow(img_gray,cmap=plt.cm.gray)
plt.show()
Output:
type: <class 'numpy.ndarray'> shape: (600, 800)
cv2.imwrite()で画像ファイルを保存
cv2.imwrite()による保存は簡単で、以下のとおりである。
Code:
cv2.imwrite('./pic/landscape_gray.png', img_gray)
コメント