OpenCVの使い方を徹底解説

こんにちは三谷です。

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

OpenCVとは?

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

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

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

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

インストールの方法はこちらの記事(画像編集用ライブラリ「OpenCV」のインストール方法.docx)にまとめてありますのでチェックしてみてくださいね。

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

OpenCVでは画像を取り扱います。画像データを処理するために、OpenCVで画像を読み込む方法をご紹介します。

参考記事:動画の読み込み方法についても紹介しています。
OpenCVのimreadを使って画像・映像を読み込む方法.docx

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

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

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

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

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

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

import cv2import 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」を選択し機械学習プログラムを実行します。

画像が表示されます。

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

OpenCVで顔認識する方法

OpenCVでは、あらかじめ用意されたファイルを使用することで、人間や猫の顔認識をすることができます。
あらかじめ用意されたファイルというのは「カスケードファイル」と呼ばれるもので、既に学習が完了している学習器です。
カスケードファイルは以下のページより無料でダウンロードできます。
https://github.com/opencv/opencv/tree/master/data/haarcascades
今回は、人の顔を正面から認識できる「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]で新しくファイルを作成します。

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

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

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

import cv2 import matplotlib.pyplot as pltimage = 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の座標, 幅, 高さ]という数値のリストです。

顔を囲う枠の色をあらかじめ指定しておきます。色の指定は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で画像のノイズを除去するスムージングをする方法

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

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

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

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

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

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

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

#スムージング(ガウシアンフィルター)defblur(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は、今回ご紹介した処理の他にも様々な処理を行える機能を持っています。

最新情報をチェックしよう!
企業向けAI人材育成サービス

企業向けAI人材育成サービス

AI事業発足やAI導入に必要な人材育成のステップとAI研究所が提供するサービス。AI研究所の人材育成サービスでは、3つのステップを軸に御社の業務内でAIを活用できる人材育成やAIプロジェクトの支援を行います。

CTR IMG