ざっくり流れは、カスケード分類器に学習済み識別器を食わせて検出実行。
参考サイトのソースコードを拝借してビルド&実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/objdetect.hpp> #include <iostream> #ifdef _DEBUG #pragma comment(lib,"C:\\OpenCV\\build\\x64\\vc14\\lib\\opencv_world310d.lib") #else #pragma comment(lib,"C:\\OpenCV\\build\\x64\\vc14\\lib\\opencv_world310.lib") #endif using namespace cv; using namespace std; Mat detectFaceInImage(Mat &image, string &cascade_file) { CascadeClassifier cascade; cascade.load(cascade_file); vector<Rect> faces; cascade.detectMultiScale(image, faces, 1.1, 3, 0, Size(20, 20)); for (int i = 0; i < faces.size(); i++) { rectangle(image, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 200, 0), 3, CV_AA); } return image; } int main(int argc, char const *argv[]) { Mat image = imread("lena.png"); string filename = "C:\\OpenCV\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml"; Mat detectFaceImage = detectFaceInImage(image, filename); imshow("detect face", detectFaceImage); waitKey(0); return 0; } |
できた。
参考サイト
OpenCVの使い方(8) 顔検出を行ってみる – のんびりしているエンジニアの日記
http://nonbiri-tereka.hatenablog.com/entry/2015/05/13/063713
OpenCV: Face Detection using Haar Cascades
http://docs.opencv.org/master/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0
opencv – Haar Cascades vs. LBP Cascades in Face Detection – Stack Overflow
http://stackoverflow.com/questions/8791178/haar-cascades-vs-lbp-cascades-in-face-detection