OpenCVで二値化する方法【Python】

OpenCVで二値化する方法【Python】プログラミング
ゆうすけ
ゆうすけ

OpenCVを勉強をしているんですが、
「二値化」が何か分かりません・・・

資格マフィア
資格マフィア

すごいざっくり説明すると「画像の白黒化」だ。
OpenCVライブラリを使った二値化の方法も解説しよう。


✔️ 本記事のテーマ

OpenCVでの二値化の方法(コード付き)


✔️ 読者さんへの前置きメッセージ


結論から述べると、以下の関数を使うことでOpenCVを使って二値化をできます。

cv2.threshold(画像, しきい値, 255, 二値化の手法)

 

本記事は「OpenCVライブラリを使った二値化の方法」について書いています。

 

この記事を読むことで、
「二値化とは? や 二値化をするコードの書き方」
をイメージできるようになります。

 

OpenCVライブラリは画像処理に特化したPythonライブラリです。

 

OpenCVライブラリを使えば、画像の二値化などを簡単に行うことができます。

 

それでは、その方法を詳しく解説していきましょう。

 

OpenCVとは?

OpenCVとは?

OpenCV (Open Source Computer Vision Library) は、
画像処理に関する機能をまとめたライブラリです。

 

主に、画像中から人の顔を検出したり、カラー画像を白黒画像に変換する場面で使われています。

 

OpenCVライブラリの関数一覧と使い方については
【python】OpenCVの関数一覧と使い方」の記事で解説しています。

 

今では「画像処理」を用いたPythonプログラミングでは必ずと言っていいほど使用されるほどに、メジャーなライブラリです。

 

インストール自体も簡単なので趣味や個人開発にもオススメです。

 

なお、OpenCVのインストールについては
【python】OpenCVのインストール方法」の記事で解説しています。

 

OSにもよりますが、3ステップほどでサクッとインストールすることができます。

 

OpenCVの二値化とは?

OpenCVの二値化とは?

すごいざっくり説明すると、「画像の白黒化」です。

 

厳密には少し違いますが、イメージとしてはこの理解でOKです。

 

例えば、画像の二値化を行うと、
以下のようにグレースケール画像を白黒画像に変換することができます。


OpenCVの二値化処理
処理の細かな部分を解説すると、全てのピクセルを白か黒かに変換しています。

 

グレースケールとは画像を白と黒の多階調のグレーだけで表現する方式のことです。

 

グレースケールでは以下のように、黒を0、白を255として、画素値が設定されています。


グレースケール

OpenCVライブラリを使った二値化では、
基準の値(例えば125)を設定して、基準値以下を黒、基準値以上を白に変換しています。

 

先ほど、厳密には違うと言ったのはこの部分です。

 

単純に白黒しているというよりは、
基準の数字以下の色を0(つまり黒)、基準の数値以上の色を255(つまり白)に変換します。

 

色の数値を、0 or 255 の二値に変換するので「二値化」と呼ばれているのです。

 

OpenCVで二値化をする方法(コード付き)

OpenCVで二値化をする方法(コード付き)

OpenCVライブラリで二値化を行う方法を解説します。

 

まず、今回のサンプルコードは以下のようになります。

# ライブラリのインポート
import cv2

# 画像の読み込み
img = cv2.imread('/etc/tmp/Lena.jpg', 0)

# 二値化(しきい値125以上の色を255に変換)
ret, img_thresh = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY)

# 二値化画像の保存
cv2.imwrite(''/etc/tmp/after_Lena.jpg', img_thresh)

 

それでは、順番に詳しく解説していきましょう。

ライブラリのインポート

import cv2

 

OpenCVライブラリはPythonの標準ライブラリではありません。

 

そのため、プログラムの一番上でインポートすることで、
OpenCVライブラリを使えるようにしておきましょう。

 

なお、プログラムを実行した時にこの箇所でエラーが出る場合は、
そもそもOpenCVライブラリのインストールが上手くできていない可能性があります。

 

OpenCVのインストールについては
【python】OpenCVのインストール方法」の記事で解説しています。

 

エラーが出る場合は、一度、確認してみましょう。

画像の読み込み

img = cv2.imread('/etc/tmp/Lena.jpg', 0)


OpenCVライブラリで二値化を行う場合は、
事前準備としてOpenCVライブラリの関数を使って、画像を読み込む必要があります。

 

画像を読み込むには、cv2.imread関数を使います。

 

第1引数には画像のパス、第2引数には0を指定します。

 

第2引数に0を指定することで、グレースケール画像として読み込むことができます。

 

この引数を省略すると、読み込む画像によっては後続の処理でエラーになってしまうかもしれません。二値化をする際は、忘れず指定するようにしましょう。

 

なお、OpenCvライブラリで画像を読み込む方法については、
OpenCVで画像を読み込む方法【Python】」の記事で解説しています。

 

二値化(しきい値125以上の色を255に変換)

ret, img_thresh = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY)

 

この部分で二値化処理を実施しています。

 

OpenCVライブラリのthreshold関数を使って二値化をしています。

 

この関数は、引数と戻り値が少しややこしいです。
コードベースで解説しましょう。

 

不要(※), 二値化された画像 = cv2.threshold(読み込んだ画像①, しきい値②, 変換後の値③, 二値化手法④)

 

各引数と戻り値はこのようになっています。

 

この関数は4つの引数を指定する必要があります。

 

1つ目で「読み込んだ画像」を指定します。
サンプルコードはimread関数を戻り値を受けた変数を渡しています。

 

2つ目で「しきい値」を指定します。
「しきい値」とはOpenCVの二値化とは?で解説した「基準値」のことです。

 

3つ目は「変換後の値」を指定します。
ここは基本的に255を指定しておけば良いでしょう。

 

4つ目は二値化の手法を指定しましょう。

この引数には以下の手法を指定できます。

  • cv2.CV_THRESH_BINARY
  • cv2.CV_THRESH_BINARY_INV
  • cv2.CV_THRESH_TRUNC
  • cv2.CV_THRESH_TOZERO
  • cv2.CV_THRESH_TOZERO_INV
  • cv2.THRESH_OTSU

基本的には、「cv2.THRESH_BINARY」を指定すれば良いでしょう。

 

戻り値については2つありますが、
基本的には「2つ目の戻り値だけ使う」と覚えておくと良いでしょう。

 

一つ目の戻り値も、本来はちゃんと使い道があります。
「大津の二値化」を行う際には、こちらの戻り値を使うのですが、
複雑な話になるので本記事では説明を割愛します。

 

二値化画像の表示

cv2.imwrite(''/etc/tmp/after_Lena.jpg', img_thresh)

 

最後に二値化した画像を保存しておきましょう。

 

画像の保存には、imwrite関数を使います。

 

一つ目の引数に「出力画像のパス」、
二つ目の引数に「threshold関数の2つ目の戻り値」を指定します。

 

なお、cv2.imwrite関数の詳しい情報については、
OpenCVで画像を保存する方法【Python】」の記事で解説しています。

 

OpenCVで二値化するときの注意点

OpenCVで二値化するときの注意点

OpenCVライブラリで二値化をする際、
cv2.threshold関数のインプット画像はグレースケール画像でないとエラーが発生します。

 

例えば、カラー画像をそのままインプット画像とすると、
画像のチャネル数が想定外となり、エラーが発生します。

 

本記事のサンプルコードでは、
画像を読み込む際にグレースケールとして読み込むように設定しています。

 

画像の読み込みで「この引数を省略すると、読み込む画像によっては後続の処理でエラーになってしまうかもしれません。」と記載している部分です。

 

もし、自身でコードを書いて、エラーが発生している方は、
インプット画像をグレースケール画像に修正するとエラーが解消するかもしれません。

 

OpenCVやPythonについてもっとスキルをつけるなら

OpenCVやPythonについてもっとスキルをつけるなら

今回はOpenCVの白黒二値化について解説しました。

 

OpenCVは今回解説した機能以外にも多くの便利な機能があり、
マスターすれば非常に強い武器になるでしょう。

 

もし、OpenCVについて独学でスキルをつけるなら、以下の書籍がオススメです。

 

この書籍はOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。

 

OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で解説した白黒二値化についても掲載されています。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

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