OpenCVの使い方を徹底解説

今回は、最近流行しているディープラーニングの中でも注目を集めている画像認識で、よく使用される無料ライブラリ「OpenCV」の使い方について徹底解説します!

OpenCVとは?

OpenCVとは
出典:https://opencv.org/

OpenCVは、画像処理・画像解析および機械学習等の機能を持つオープンソースのライブラリです。
Pythonを始め、C/C++、Java、MATLAB用として公開されており、もともとはインテルが開発・公開しています。

無料でOpenCVを使った画像認識の環境を構築する方法

OpenCVを使った環境を構築するには、以下の作業が必要です。

  • Pythonのインストール
  • Pycharmのインストール
  • OpenCVのインストール

インストールの方法は、以下の記事にまとめてありますのでチェックしてみてくださいね。

参考記事:画像編集用ライブラリ「OpenCV」のインストール方法

OpenCVの基本的な使い方(画像の読み込み)

OpenCVでは画像を取り扱います。
画像データを処理するために、OpenCVで画像を読み込む方法をご紹介します。
以下の記事で動画の読み込み方法についても紹介しています。

参考記事:OpenCVのimreadを使って画像・映像を読み込む方法

[Create New Project]で新しいプロジェクトを作成します。

Create New Project

Locationに「opencv」と入力し、[Create]をクリックします。
Pycharmでは、プロジェクトという単位でプログラムを管理することができます。
プロジェクトは、指定したLocationのディレクトリに作られたフォルダです。

OpenCVの基本的な使い方

[File]-[New]で新しくファイルを作成します。

OpenCVの基本的な使い方2

ダイアログボックスから「Python File」を選びます。

OpenCVの基本的な使い方3

「Name」に「image.py」と入力し[OK]をクリックします。

OpenCVの基本的な使い方4

使用するライブラリをインポートします。
OpenCVはcv2でインポートできます。
また、Matplotlibはグラフ描画ライブラリとして、インポートした画像を視覚化(ビジュアライズ)するときに使用されます。

import cv2
import matplotlib.pyplot as plt
image = cv2.imread(“image.jpg”)

テキスト ボックス画像を読み込みます。
画像を読み込むにはimreadという関数を使用します。

このように、フォルダパスを書かずに読み込むと、pythonファイルと同階層のディレクトリにある画像が読み込まれます。
つまり、今回の場合は、「image.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(image.jpg)として任意の画像ファイルを保存しておく必要があります。

image=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

テキスト ボックス読み込んだ画像をRGBに変換します。

OpenCVで読み込む画像データの色情報は、一般的なRGB形式ではなく、BGR形式で読み込まれます。
このまま表示させようとすると、色合いがおかしくなるため、COLOR_BGR2RGBで色を変換しています。

Pythonに関連するライブラリや関数では、「2」を「to」の意味で使用することが多くあります。
BGR2RGBは、「BGR to RGB」、つまり「BGRをRGBに」と言う意味で使われています。

plt.imshow(image)
plt.show()

テキスト ボックス顔認識した画像を表示させます。

[Run]-[Run]で「image.py」を選択し機械学習プログラムを実行します。

OpenCVの基本的な使い方5

画像が表示されます。

OpenCVの基本的な使い方6

クッパ22さんによる写真ACからの写真

OpenCVで顔認識する方法

OpenCVでは、あらかじめ用意されたファイルを使用することで、人間や猫の顔認識をすることができます
あらかじめ用意されたファイルというのは「カスケードファイル」と呼ばれるもので、既に学習が完了している学習器です。
カスケードファイルはこちらより無料でダウンロードできます。

今回は、人の顔を正面から認識できる「haarcascade_frontalface_alt.xml」をダウンロードし、プロジェクトフォルダ内に保存してください。
顔認識以外でも様々なカスケードファイルがあらかじめ用意されています。

 

ファイル名内容
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml眼鏡
haarcascade_frontalcatface.xml猫の顔(正面)
haarcascade_frontalcatface_extended.xml猫の顔(正面)
haarcascade_frontalface_alt.xml顔(正面)
haarcascade_frontalface_alt_tree.xml顔(正面)
haarcascade_frontalface_default.xml顔(正面)
haarcascade_fullbody.xml全身
haarcascade_lefteye_2splits.xml左目
haarcascade_lowerbody.xml下半身
haarcascade_profileface.xml顔(証明写真)
haarcascade_righteye_2splits.xml右目
haarcascade_smile.xml笑顔
haarcascade_upperbody.xml上半身

 

 

早速プログラムを作ってみましょう。

[File]-[New]で新しくファイルを作成します。

OpenCVで顔認識する方法

ダイアログボックスから「Python File」を選びます。

OpenCVで顔認識する方法2

「Name」に「face.py」と入力し[OK]をクリックします。

OpenCVで顔認識する方法3

使用するライブラリと画像をインポートします。
画像ファイルは人の顔が写った任意の写真を、プロジェクトフォルダ内に保存しておいてください。

import cv2

import matplotlib.pyplot as plt

image = cv2.imread(“face.jpg”)

image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

今回は、人の顔認識ができる「haarcascade_frontalface_alt.xml」を使用します。
CascadeClassifierでカスケードファイルを読み込めます。

casceade_file = “haarcascade_frontalface_alt.xml”
cascade = cv2.CascadeClassifier(casceade_file)

顔を認識し矩形にリスト化します。
例:[55, 68, 150, 150]

face_list = cascade.detectMultiScale(image)

cascade.detectMultiScale(image)は、顔を検出してリスト化する関数です。
リストは、画像の左上を(0, 0)の原点とし、顔の位置の[Xの座標, Yの座標, 幅, 高さ]という数値のリストです。

OpenCVで顔認識する方法4

顔を囲う枠の色をあらかじめ指定しておきます。
色の指定はRGB形式のため、青の場合は(0, 0, 255)と指定します。

color=(0, 0, 255)

顔を認識した箇所に枠を描画するプログラムを作成します。

if len(face_list) > 0 :
for face in face_list :
x, y, w, h = face
cv2.rectangle(image, (x,y), (x+w, y+h), color, thickness=2)else:
print(“顔が認識できませんでした。”)

顔認識した画像を表示させます。

plt.imshow(image)
plt.show()
[Run]-[Run]で「face.py」を選択し機械学習プログラムを実行します。

OpenCVで顔認識する方法5

画像が表示されます。

OpenCVで顔認識する方法6

OpenCVで画像のノイズを除去するスムージングをする方法

OpenCVでは、フィルター処理も行えます
画像データによってはノイズがのっているものもあるため、ノイズ除去のためにスムージング処理を行なうこともしばしばあります。
今回はスムージング処理の中でも、ガウシアンフィルターというフィルターを掛けて画像スムージングをしてみます。

[File]-[New]で新しくファイルを作成します。

OpenCVで画像のノイズを除去するスムージングをする方法

ダイアログボックスから「Python File」を選びます。

OpenCVで画像のノイズを除去するスムージングをする方法2

「Name」に「smooth.py」と入力し[OK]をクリックします。

OpenCVで画像のノイズを除去するスムージングをする方法3

使用するライブラリをインポートします。

import cv2
import matplotlib.pyplot as pltimage = cv2.imread(“face.jpg”)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

ガウシアンフィルターの関数を用意します。

#スムージング(ガウシアンフィルター)
def
blur(img):
filtered = cv2.GaussianBlur(img, (11, 11), 0)
return filtered

画像をガウシアンフィルターでスムージングします。

img_gaussian = blur(image)

画像を表示します。

plt.imshow(img_gaussian)
plt.show()
[Run]-[Run]で「smooth.py」を選択し、機械学習プログラムを実行します。

OpenCVで画像のノイズを除去するスムージングをする方法4

画像が表示されます。

OpenCVで画像のノイズを除去するスムージングをする方法5

まとめ

いかがだったでしょうか。
今回は、OpenCVの使い方について、画像を読み込む方法・顔認識する方法・フィルター処理する方法など画像付きで徹底解説してきました。
OpenCVを使った画像認識の環境を構築するには、まずPython・Pycharm・OpenCVのインストールが必要でしたね。

OpenCVは、他にも様々な処理を行える機能を持っています。
まずは、この記事を参考にOpenCVの使い方に慣れていただければと思います。

 

最新情報をチェックしよう!