Pythonを使って複数のカラー画像を白黒画像に変換する

Pythonを使って複数のカラー画像を白黒画像に変換する

カラー画像から白黒画像へ変換したいときがありますよね。しかも、複数のカラー画像を一枚一枚白黒画像へと変換するのは面倒… そこでこの記事では、Pythonを使って複数のカラー画像を白黒画像に変換する方法を具体的に解説していきます。

動作検証済み環境

macOS Big Sur(11.4), python3.7.10, Jupyter Notebook

*本記事では、Pythonを実行する環境としてJupyter Notebookを用いています。Jupyter Notebookのインストールがお済み出ない方は、こちらの記事を参考にインストールをお願いします。インストールは5分程度で完了します。

【Python】Jupyter Notebookのメリット、インストール方法、使い方

複数のカラー画像を白黒画像に変換する方法

画像ファイルを用意しよう

今回はサンプルとして猫の写真を3枚用意しました。

cat.jpeg
cat2.jpeg
cat3.jpeg

猫の画像にはそれぞれ、cat.jpeg、cat2.jpeg、cat3.jpegと名前がついています。今回、画像ファイルの拡張子は「.jpeg」を用いていますが、「.png」や「.gif」といった他の画像ファイルの拡張子でも構いません。画像ファイルはJupyter Notebookと同じ階層フォルダの中に格納してください。

プログラムを実行する

OpenCVのインストール(事前準備)

今回、「OpenCV」というPythonのライブラリを使用します。しかし、初期環境でのJupyter NotebookではOpenCVが入っておらず、自分自身でインストールする必要があります。Anaconda Navigator上でOpenCVをインストールしていきましょう。

Anaconda Navigatorを起動します。
①自分の使っている環境を選ぶ
②Not installedを選択
①「openCV」と検索
②opencvにチェックを入れる
③Applyをクリック
Install Packagesが現れたら、Applyを押してください。
openCVがきちんとinstalledしたことを確認します。

これで、OpenCVライブラリのインストールは完了です!

1枚のカラー画像を白黒画像に変換するためのコードを書いてみよう(サンプルコードあり)

1枚のカラー画像を白黒画像に変換するコードは次のようになります。「cat.jpeg」のところに、ご自身が用意した画像ファイル名を書きます。

import cv2

# カラー画像の読み込み + 白黒化
grayscale_image = cv2.imread('cat.jpeg', cv2.IMREAD_GRAYSCALE)

# 白黒画像の保存
cv2.imwrite('cat_gray.jpeg', grayscale_image)

このコードを実行すると、フォルダ内に白黒画像に変換された画像(ファイル名:cat_gray.jpeg)が保存されます。

コードを実行する前の画像と、実行した後の画像を見比べてみましょう。

入力前:cat.jpeg
出力結果:cat_gray.jpeg

きちんと白黒画像になっています!

複数のカラー画像を白黒画像に変換するためのコードを書いてみよう(サンプルコードあり)

いよいよ複数枚のカラー画像を白黒画像に変換していきます。とはいっても、1枚のカラー画像を白黒画像にすることができたなら、複数枚のカラー画像を変換することは簡単です。

複数のカラー画像を白黒画像にするためのコードは以下になります。

import cv2
import os

# 白黒画像の保存先
new_dir_path = './images'
if not os.path.exists(new_dir_path):
    # 保存先がなければ作成する
    os.mkdir(new_dir_path)

# 画像の名前のリスト
cat_image_names = ["cat", "cat2", "cat3"]
image_type = ".jpeg"

for cat_image_name in cat_image_names:
    grayscale_image = cv2.imread(cat_image_name+image_type, cv2.IMREAD_GRAYSCALE)
    cv2.imwrite(os.path.join(new_dir_path, cat_image_name+"_grayscale"+image_type), grayscale_image)

出力結果

コードによって生成されたimagesフォルダの中に、3枚の猫の白黒画像(cat_grayscale.jpegcat2_grayscale.jpegcat3_grayscale.jpeg)が生成されていれば、正常にプログラムが実行されています。

コードの解説

import cv2
import os

cv2とosライブラリを呼び出すコードになっています。osとは主にファイルやディレクトリ操作が可能で、ファイルの一覧やpathを取得できたり、新規にファイル・ディレクトリを作成することができるモジュールです。

os.mkdir(new_dir_path)

新しいフォルダを作るコードです。new_dir_pathに格納された「images」フォルダを作ります。

if not os.path.exists(new_dir_path):
    os.mkdir(new_dir_path)

ここでは、imagesフォルダが存在するかどうかの条件分岐を書いています。os.path.existsはフォルダが存在するかどうかを確かめるコードです。今回は、imagesフォルダがあるかどうかを確かめています。二行目のos.mkdirはフォルダを作成するコードです。今回は、もしimageフォルダが存在しない場合は、imageフォルダを作成するというコードを書いています。

cat_image_names = ["cat", "cat2", "cat3"]

こちらはcat_image_namesという配列に、複数枚の画像を格納しています。こちらの配列に対し、

for cat_image_name in cat_image_names:

forは特定の処理を繰り返すコードです。こちらのコードで、cat_image_namesの中の要素に対して特定の処理を繰り返します。今回は「画像を白黒にする」処理を繰り返させます。

grayscale_image = cv2.imread(cat_image_name+image_type, cv2.IMREAD_GRAYSCALE)

残りのコードは、カラー画像を白黒画像にするコードになります。cv2.imread は第一引数に指定した画像を第二引数で指定した処理を行います。ここでは、第一引数に指定した画像はcat_image_name+image_typeで、第二引数で指定した処理はcv2.IMREAD_GRAYSCALEのことで、画像を白黒で読み込むOpenCVの機能となります。

cv2.imwrite(os.path.join(new_dir_path, cat_image_name+"_grayscale"+image_type), grayscale_image)

cv2.imwriteは画像を書き出す機能となっております。第二引数で指定した画像を、第一引数の画像名で保存します。

os.path.joinはパスを結合させるコードです。つまりnew_dir_path, cat_image_name+"_grayscale"+image_type./image/cat_grayscale.jpeg というパスになります。

このように、複数枚を白黒画像にしたかったら、それらを配列にして、白黒化するコードで処理する。この一連の流れを繰り返すことで、複数のカラー画像をいっぺんに白黒画像にすることができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です