LoginSignup
6
8

More than 3 years have passed since last update.

OpenCVの勉強②(オブジェクト検出)

Last updated at Posted at 2019-04-07

opencvの勉強、第2回です。
今回はオブジェクト検出(顔検出)をしたいと思います。
ちなみに、第1回はこちらです。

カスケード型分類器の準備

今回は予め用意されたカスケード型分類器を使って、顔検出をしてみたいと思います。

Anacondaをインストールされた方

Anaconda3フォルダの中の\Lib\site-packages\cv2\dataフォルダに分類器が入っています。

Anacondaをインストールされていない方

学習済みの分類器をOpenCVの公式サイトからダウンロードします。
* 上部にある「Releases」から自身のOpenCV Versionの「Win Pack」をダウンロード
* ダウンロードしたファイルを解凍
* \opencv\sources\data\haarcascadesの中に分類器が入っています。

今回はhaarcascade_frontalface_default.xml(正面からの顔を検出する分類器)を使ってみることにします。
分類器haarcascade_frontalface_default.xmlとサンプル画像(前回使ったhisyo.jpg)は、pythonファイルは同じディレクトリに保存します。

顔検出の実行

とりあえず、下のコードを使って、顔検出をしてみましょう。

face.py
import cv2

# 入力画像の読み込み
img = cv2.imread("hisyo.jpg")

# カスケード型識別器の読み込み
cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

# グレースケール変換(グレースケールを使用すると、高速に顔検出できるらしい)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 顔領域の探索
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))

# 顔領域を赤色の矩形で囲む
for (x, y, w, h) in face:
    cv2.rectangle(img, (x, y), (x + w, y+h), (0,0,200), 3)

# 結果画像を保存
cv2.imwrite("result.jpg",img)

#結果画像を表示
cv2.imshow('image', img)
cv2.waitKey(0)

顔検出の結果

ばっちり顔検出ができました!
result.jpg

他の画像でも試してみましょう。
pic2.jpg
pic2_result.jpg
ばっちり顔検出できました(マスクまで顔検出されました)

pic.jpg
pic_result.jpg
一部検出できないものや誤検出がありますが、概ね正しく検出できているようです。

参考文献

こちらのサンプルソースを参考にさせていただきました。顔検出の原理もわかりやすく書かれています。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8