OpenCVライブラリの使い方がいまいちわかりません・・・
OpenCVはコツさえ掴めば、簡単に使いこなせる。
本記事では「OpenCVのインストール」から
「顔にモザイク処理を行う方法」まで流れで説明しよう。
✔️ 本記事のテーマ
OpenCVライブラリの使い方
✔️ 読者さんへの前置きメッセージ
本記事は「OpenCVライブラリの処理の流れ」について書いています。
この記事を読むことで「OpenCVライブラリを使った実際の処理手順」を理解できます。
OpenCVライブラリは画像処理用Pythonライブラリです。
そして、その機能性の高さと使いやすさから人気が高いライブラリです。
この記事ではOpenCVライブラリの使い方を、
実際に画像処理を行う手順通りに関数ベースで解説します。
「OpenCVライブラリのインストール」~「画像の顔にモザイク処理を行う方法」
までをサンプルコードとともに解説しています。
それでは、OpenCVライブラリの使い方を解説していきましょう。
OpenCVライブラリのインストール
OpenCVライブラリはPythonの標準ライブラリではないので、まずインストールする必要があります。
インストールはpipで行います。
pip install opencv-python
上のコマンドをターミナル(Windowsであれば、コマンドプロンプト)で実行すればOKです。
なお、インストール方法の詳細については
「【python】OpenCVのインストール方法」の記事に書いています。
OpenCVライブラリを使った処理の流れ
OpenCVライブラリは以下の手順で行う必要があります。
import → 前処理 → 本処理 → 画像の書き出し
OpenCVは、この手順を守らないと正しく処理を行うことができないのが少しややこしいです。
逆に、この手順さえ守れば他に気にすることはあまりないです。
この記事で解説する「OpenCVライブラリで顔にモザイク処理を行う」手順は以下の通りです。
- OpenCVライブラリをimport
- OpenCVライブラリで画像を読み込む
- 画像をグレースケール化する
- 顔を検出する
- 検出した部分にモザイク処理をする
- OpenCVライブラリで処理した画像データを書き出す
手順に沿って、順番に詳しく解説していきましょう。
OpenCVライブラリをimport
OpenCVライブラリを使うためにはPythonモジュールの中でimportする必要があります。
Pythonモジュールで以下のimport文を書いておきましょう。
import cv2
なお、import文ではopencvではなく、cv2と書く必要があります。
間違えやすいので気をつけましょう。
OpenCVライブラリで画像を読み込む
次に画像処理を行うために、OpenCVライブラリで対象画像を読み込む必要があります。
画像の読み込みにはcv2.imread関数を使いましょう。
img = cv2.imread('./sample.png')
これにより読み込んだ画像をOpenCVで処理することができます。
読み込んだ画像データはNdarray型で保持されます。
なお、cv2.imread関数の詳細については
「OpenCVで画像を読み込む方法【Python】」の記事に書いています。
OpenCVライブラリで画像をグレースケール化する
OpenCVで画像処理を行うには、画像の前処理が必要になります。
今回は顔検出を行うので、インプット画像をグレースケール化する必要があります。
画像のグレースケール化にはcv2.cvtColor関数を使います。
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
これにより顔検出へのインプットが用意できました。
なお、cv2.cvtColor関数の詳細については
「OpenCVでグレースケール画像を簡単に作成する【Python】」の記事で解説してます。
OpenCVライブラリで顔を検出する
ここまでで前処理が完成しているので、顔検出を実施していきましょう。
まず、顔検出には検出器が必要となります。
検出器はOpenCVの公式GitHubに公開されているので、ダウンロードしてきます。
このXMLファイルをダウンロードしてきて、そのファイルパスをcv2.CascadeClassifier関数の引数として指定することで、検出器をプログラムの中から使うことができます。
コードでは以下のように記述します。
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(img_gray)
なお、変数facesには「顔として検出したエリア」の
[始点x座標, 始点y座標, エリアの幅, エリアの高さ] のリストが格納されています。
なお、OpenCVを使った顔検出の方法は
「OpenCVで顔を検出する【Python】」の記事で詳しく解説しています。
OpenCVライブラリで検出した部分にモザイク処理をする
エリアを検出したので、そのエリアに対してモザイク処理をかけていきましょう。
モザイク処理はcv2.resize関数を使います。
cv2.resize関数によって、
対象のエリアを「サイズ縮尺 -> 元のサイズに戻す」をすることでモザイク化ができます。
コードで示しましょう。
x, y, width, height = faces
img_after = img_gray.copy()
face_area = img_after[y:y + height, x:x + width]
face_area_small = cv2.resize(face_area, None, fx=0.1, fy=0.1, interpolation=cv2.INTER_NEAREST)
face_area = cv2.resize(face_area_small, face_area.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
img_after[y:y + height, x:x + width] = face_area
こうすることで、検出したエリアのみをモザイク化することができます。
なお、このモザイク処理についてのより詳しい解説は
「OpenCVを使ってモザイク処理を行う【Python】」の記事に書いています。
OpenCVライブラリで処理した画像データを書き出す
最後にここまでで処理を行った画像データを書き出しましょう。
画像データの書き出しにはcv2.imwrite関数を使います。
img = cv2.imwrite('./sample_after.png', img_after)
これによりOpenCVライブラリで処理した画像を保存することができます。
なお、画像の書き出しについてのより詳しい解説は
「OpenCVで画像を保存する方法【Python】」の記事に書いています。
今回の記事で使ったOpenCVサンプルコード
ここまで実際の手順に沿って解説してきました。
ここで今回使用したサンプルのPythonコードをまとめて載せておきます。
# OpenCVライブラリをimport
import cv2
# 画像を読み込む
img = cv2.imread('./sample.png')
# 画像をグレースケール化する
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔を検出する
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(img_gray)
# 検出した部分にモザイク処理をする
x, y, width, height = faces
img_after = img_gray.copy()
face_area = img_after[y:y + height, x:x + width]
face_area_small = cv2.resize(face_area, None, fx=0.1, fy=0.1, interpolation=cv2.INTER_NEAREST)
face_area = cv2.resize(face_area_small, face_area.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
img_after[y:y + height, x:x + width] = face_area
# 処理した画像データを書き出す
img = cv2.imwrite('./sample_after.png', img_after)
OpenCVが動く環境があればコピペで動くはずなので、良ければ参考にしてみて下さい。
OpenCVや画像処理についてもっとスキルをつけるなら
今回は、OpenCVの使い方について解説しました。
OpenCVは注目が高く、いま需要の高いライブラリです。
もし、OpenCVについて独学でスキルをつけるなら、以下の書籍がオススメです。
この書籍はOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。
OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で紹介した関数も多く掲載されています。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント
[…] OpenCVライブラリの使い方【画像処理】 […]