【Python】OpenCVを用いた画像処理(2値化)

Python

 OpenCVを用いた画像処理について解説します。今回は2値化についてです。
※Pythonの基本的なことについての説明は省略します。

OpenCVのインストール

 最初に、OpenCVを使えるようにするためにopencv-pythonをインストールする必要があります。コマンドプロンプトを起動し、以下のコードを実行してください。(すでにインストール済みの方はもちろん不要です。)

pip install opencv-python
pip install opencv-contrib-python
pip install numpy

 これで画像処理を行う準備ができました。
 OpenCV(Open Source Computer Vision Library)は画像処理用の関数が多数実装されたオープンソースのライブラリです。マルチプラットフォームなので幅広く使われており、これを利用して画像処理を行っていきます。

画像処理

 今回はWindowsでVisual Studio Codeを使用してコードを書いていきます。コードについての大まかな説明はコメントアウトを利用して行います。

2値化

左:元画像 右:2値化後の画像

 2値化とは、対象の画像から設定した条件をもとに2値画像を生成する処理です。ある値(閾値)を設定し、その値より大きいか小さいかで、グレースケール画像の画素値を白(1)か黒(0)に変換します。

5行目:cv2.imread(‘対象となる画像’,0)
 これで対象となる画像を読み込みます。0はグレースケールで読み込み、1ならばカラーで読み込むことになります。

8行目:cv.threshold(入力画像,閾値,最大値,閾値処理)
 これで2値化を行います。入力画像はグレースケール画像である必要があります。画素値が第2引数の閾値より大きければ、第3引数に最大値として設定した値になります。つまり、第3引数は閾値より大きく設定する必要があります。閾値処理には以下のようなものがあります。

THRESH_BINARY閾値を超えた画素値は最大値になり、それ以外は0になる。
THRESH_BINARY_INV閾値を超えた画素値は0になり、それ以外は最大値になる。
THRESH_TRUNC閾値を超えた画素値は閾値と同じ値になり、それ以外は変更されない。
THRESH_TOZERO閾値を超えた画素値は変更されず、それ以外は0になる。
THRESH_TOZERO_INV閾値を超えた画素値は0になり、それ以外は変更されない。

10行目、11行目:cv2.imshow(“ウィンドウに表示される文字”, 表示させる画像)
 これは画像をウィンドウとして表示させるときに使用します。

ウィンドウに表示される文字とは、左上の文字のことです(この場合は「before」と「after」)。

13行目:cv2.waitKey()
 これは次の処理を行うまでの待機時間についての命令です。()内に数値を入れて待機時間を設定します。1000で1秒間待機です。()内が0なら、適当なキーが押されるまで待機ということになります。

14行目:cv2.destroyAllWindows()
 これで表示させたウィンドウを全て閉じます。つまり、13,14行目は「適当なキーを入力した時、10,11行目の命令で表示させたウィンドウを閉じる」ということです。

↓コピー用プログラム

import cv2
import math
import numpy as np

img_before = cv2.imread('元となる画像',0) #画像の読み込み

thresh = 144 #閾値
ret,img_after = cv2.threshold(img_before, thresh, 255, cv2.THRESH_BINARY)

cv2.imshow("before",img_before) #元画像を表示させる
cv2.imshow("after",img_after) #2値化後の画像を表示させる

cv2.imwrite('binary.jpg', img_after) #2値化後の画像を保存

cv2.waitKey(0) #処理待ち
cv2.destroyAllWindows() #表示させた全てのウィンドウを閉じる

 使用する画像はプログラムと同じフォルダーに入れて実行してください。
「cv2.imwrite(‘保存名’, 保存する画像)」で画像を保存することもできます。

実行方法

 作成したプログラムの実行方法についてです。

 まずはコマンドプロンプトを開きます。画面左下の検索バーに「cmd」と入力すると出てくると思います。
 次にプログラムファイルの位置を知る必要があります。

 エクスプローラーを開いてプログラムファイルがあるところまで行き、上部を確認してください。今回はUSBにフォルダーを作成し、(F:)となっています。USB内の「gazousyori」というフォルダー内に「img-pro.py」という名前のプログラムを作成しました。ここにコマンドプロンプトの「cd」でディレクトリを変更します。言葉で説明するのが難しいので以下の画像を参照してください。

 後はエンターを押すだけで実行できます。一応別例も以下に挙げておきます。

 プログラムファイルの保存場所が異なる&Visual Studio Codeから確認したバージョンです。途中で「ドキュメント」と日本語が入っていますが、これはあまり良くありません。プログラムが正常に動かない場合もあります。

コメント

タイトルとURLをコピーしました