2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者向け】OpenCVで顔検出を行う(静止画)

Last updated at Posted at 2018-08-10

#はじめに
1週間前にOpenCVを始めてからハマりっぱなしですww
今回はOpenCVを用いて顔検出を行ってみます.
※まだOpenCV超初心者なので間違いなどあればご指摘ください

#環境

※正面の顔を検出するカスケード分類器は,上記のGitHubからダウンロードしたファイルの
"opencv-master\opencv-master\data\haarcascades"の中に入っている【haarcascade_frontalface_alt.xml】を使います.

#入力画像
今回はお馴染みのLenaさんを使って行います.
lena.jpg

#ソースコード

detectFace.cpp
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{
	CascadeClassifier cascade;
	cascade.load("ファイルまでのパス/haarcascade_frontalface_alt.xml"); //正面顔情報が入っているカスケードファイル読み込み
	Mat img = imread("ファイルまでのパス/lena.jpg", IMREAD_UNCHANGED); //入力画像読み込み
	vector<Rect> faces; //輪郭情報を格納場所
	cascade.detectMultiScale(img, faces, 1.1, 3, 0, Size(20, 20)); //カスケードファイルに基づいて顔を検知する.検知した顔情報をベクトルfacesに格納

	for(int i = 0; i<faces.size(); i++) //検出した顔の個数"faces.size()"分ループを行う
	{
		rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 0, 255), 3, CV_AA); //検出した顔を赤色矩形で囲む
	}

	imshow("detect face", img);
	waitKey(0);
}

#出力画像
以下のように出力されました.正常に顔を検出できていますね.
キャプチャ.PNG

#おまけ
他の画像でも顔検出を行ってみました.
2.PNG
やっぱり顔が少し横に向くと検出が難しくなるみたいですね.

#おわりに
次はUSBカメラで撮影した動画に対してリアルタイムで顔検出を行う予定です.
実装しました!よかったら合わせて読んでください↓↓
【初心者向け】USBカメラで撮影した動画をリアルタイムで顔検出

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?