LoginSignup
4
5

More than 5 years have passed since last update.

Python OpenCVで複数の画像が含まれている部分を、検出/表示させてみた

Last updated at Posted at 2019-05-05

背景

ある画像の中から、複数の顔を検出したい!!
ということで、
フォルダに格納した複数の顔を読み込み、
元画像から検出して、強調表示させてみました。

環境

MacOS Mojave ver10.14.4
Anaconda Navigator 1.9.7
 ※Anacondaのインストールは、こちらを参考に
JupiterNotebook 5.4.0
OpenCV 3.4.2
※OpenCVのインストールは以前の記事を参照ください

手順

方針

・検索したい画像をフォルダから読み込む
・検索対象画像に対して、検索をかけ一致した部分を四角で囲んで表示させる

実装

まずは、各種ライブラリをインポート
cv2:OpenCVを使用するため
glob:フォルダ内のファイルを取得するため
numpy:一致率の計算を実行するため
matopolib:グラフを表示させるため

import cv2  #OpenCVをインポート
import glob
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #JupiterNotebookに表示するため

フォルダの中のファイルを取得する


files =glob.glob("./ImagesFolder/temp_template/*") #検索画像保管フォルダパスを指定

今回のフォルダの中身を確認する。
(今回は以下の母娘2人の画像ファイルを入れています)
スクリーンショット 2019-05-05 22.46.06.png
temp_saki.png
temp_saki.png
temp_saki2.png
temp_saki2.png

imreadを使って、検索対象の画像を読み込む


image = cv2.imread('./ImagesFolder/temp/temp_moto.png')

temp_moto.png

検索したい画像分だけ、検索をかけて一致した場合に、
cv2.rectangleで四角に囲む(繰り返し処理)


for fname in files:    
   #検索したい画像を読み込む
    template = cv2.imread(fname) 
    #検索対象画像内で画像が一致するかを検索
    result = cv2.matchTemplate(image, template, cv2.TM_CCORR_NORMED)
    # 一致部分を□で囲む
    th, tw = template.shape[:2]
    threshold = 0.99
    loc = np.where(result >= threshold)
    for pt in zip(*loc[::-1]):
        cv2.rectangle(image, pt, (pt[0] + tw, pt[1] + th), (255,0,255), 2)

Matpolibのimshow画像を表示させる
OpenCVで取得した画像はBGRデータ配列、Matplotlibで呼び出す場合のはRGBデータ配列なので、変換する必要があることに注意!

image2 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) #データ配列の変換
plt.imshow(image2)

実行結果

母と娘の2人の顔が認識されているのが確認できます!
result_temp.png

おまけ

画像を保存するには、以下を実行

cv2.imwrite('./imagesFolder/temp/result_temp.png', image)

参考

「初心者がpython Anaconda GUIで、簡単にOpenCVをインストールしてみる」
 https://qiita.com/anzanshi/items/a88df7db49f77f65fbbf
「Python OpenCVで画像の一部が一致しているか、判定結果を返してみた」
 https://qiita.com/anzanshi/items/82fc4c7a3a1f84137aef

4
5
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
4
5