OpenCVライブラリの使い方【画像処理】

OpenCVライブラリの使い方【画像処理】プログラミング
ゆうすけ
ゆうすけ

OpenCVライブラリの使い方がいまいちわかりません・・・

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

OpenCVはコツさえ掴めば、簡単に使いこなせる。
本記事では「OpenCVのインストール」から
「顔にモザイク処理を行う方法」まで流れで説明しよう。

 

✔️ 本記事のテーマ

OpenCVライブラリの使い方


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

本記事は「OpenCVライブラリの処理の流れ」について書いています。

 

この記事を読むことで「OpenCVライブラリを使った実際の処理手順」を理解できます。

 

OpenCVライブラリは画像処理用Pythonライブラリです。

 

そして、その機能性の高さと使いやすさから人気が高いライブラリです。

 

この記事ではOpenCVライブラリの使い方を、
実際に画像処理を行う手順通りに関数ベースで解説します。

 

「OpenCVライブラリのインストール」~「画像の顔にモザイク処理を行う方法」
までをサンプルコードとともに解説しています。

 

それでは、OpenCVライブラリの使い方を解説していきましょう。

 

OpenCVライブラリのインストール

OpenCVライブラリのインストール

OpenCVライブラリはPythonの標準ライブラリではないので、まずインストールする必要があります。

 

インストールはpipで行います。

 

pip install opencv-python

上のコマンドをターミナル(Windowsであれば、コマンドプロンプト)で実行すればOKです。

 

なお、インストール方法の詳細については
【python】OpenCVのインストール方法」の記事に書いています。

 

OpenCVライブラリを使った処理の流れ

OpenCVライブラリを使った処理の流れ

OpenCVライブラリは以下の手順で行う必要があります。

import → 前処理 → 本処理 → 画像の書き出し

OpenCVは、この手順を守らないと正しく処理を行うことができないのが少しややこしいです。

 

逆に、この手順さえ守れば他に気にすることはあまりないです。

 

この記事で解説する「OpenCVライブラリで顔にモザイク処理を行う」手順は以下の通りです。

  1. OpenCVライブラリをimport
  2. OpenCVライブラリで画像を読み込む
  3. 画像をグレースケール化する
  4. 顔を検出する
  5. 検出した部分にモザイク処理をする
  6. OpenCVライブラリで処理した画像データを書き出す

手順に沿って、順番に詳しく解説していきましょう。

 

OpenCVライブラリをimport

OpenCVライブラリをimport

OpenCVライブラリを使うためにはPythonモジュールの中でimportする必要があります。

 

Pythonモジュールで以下のimport文を書いておきましょう。

import cv2

 

なお、import文ではopencvではなく、cv2と書く必要があります。
間違えやすいので気をつけましょう。

 

OpenCVライブラリで画像を読み込む

OpenCVライブラリで画像を読み込む

次に画像処理を行うために、OpenCVライブラリで対象画像を読み込む必要があります。

 

画像の読み込みにはcv2.imread関数を使いましょう。

img = cv2.imread('./sample.png')

 

これにより読み込んだ画像をOpenCVで処理することができます。
読み込んだ画像データはNdarray型で保持されます。

OpenCVで画像の読み込み

 

なお、cv2.imread関数の詳細については
OpenCVで画像を読み込む方法【Python】」の記事に書いています。

 

OpenCVライブラリで画像をグレースケール化する

OpenCVライブラリで画像をグレースケール化する

OpenCVで画像処理を行うには、画像の前処理が必要になります。

 

今回は顔検出を行うので、インプット画像をグレースケール化する必要があります。

 

画像のグレースケール化にはcv2.cvtColor関数を使います。

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

 

これにより顔検出へのインプットが用意できました。

OpenCVのグレースケール画像

 

なお、cv2.cvtColor関数の詳細については
OpenCVでグレースケール画像を簡単に作成する【Python】」の記事で解説してます。

 

OpenCVライブラリで顔を検出する

OpenCVライブラリで顔を検出する

ここまでで前処理が完成しているので、顔検出を実施していきましょう。

 

まず、顔検出には検出器が必要となります。

 

検出器はOpenCVの公式GitHubに公開されているので、ダウンロードしてきます。

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

 

このXMLファイルをダウンロードしてきて、そのファイルパスをcv2.CascadeClassifier関数の引数として指定することで、検出器をプログラムの中から使うことができます。

 

コードでは以下のように記述します。

face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(img_gray)

 

なお、変数facesには「顔として検出したエリア」の
[始点x座標, 始点y座標, エリアの幅, エリアの高さ] のリストが格納されています。

OpenCVの顔検出

 

なお、OpenCVを使った顔検出の方法は
OpenCVで顔を検出する【Python】」の記事で詳しく解説しています。

 

OpenCVライブラリで検出した部分にモザイク処理をする

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でモザイク化

 

なお、このモザイク処理についてのより詳しい解説は
OpenCVを使ってモザイク処理を行う【Python】」の記事に書いています。

 

OpenCVライブラリで処理した画像データを書き出す

OpenCVライブラリで処理した画像データを書き出す

最後にここまでで処理を行った画像データを書き出しましょう。

 

画像データの書き出しにはcv2.imwrite関数を使います。

img = cv2.imwrite('./sample_after.png', img_after)

 

これによりOpenCVライブラリで処理した画像を保存することができます。

 

なお、画像の書き出しについてのより詳しい解説は
OpenCVで画像を保存する方法【Python】」の記事に書いています。

 

今回の記事で使ったOpenCVサンプルコード

今回の記事で使った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の基礎から応用までを
丁寧にかつ詳細に解説しています。

 

OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で紹介した関数も多く掲載されています。

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

エンジニアとして、

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

 

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

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

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

 

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

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

 

TechClips ME では、

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

▼▼▼▼▼

▲▲▲▲▲

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

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

 

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

 

コメント

  1. […] OpenCVライブラリの使い方【画像処理】 […]

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