OpenCV Programming on Windows

OpenCVを用いて顔を認識する (cv::CascadeClassifier)


2016.07.19: created by

前提として理解しておくべき知識


顔認識



プログラム作成の手順

  1. OpenCVを用いてVideo画像を表示する (OpenCV 用 VisualStudio 2015 プロジェクトの基本設定)」 の Visual Studio 2015 のプロジェクトを用いて作成します。
  2. OpenCV と共に配布されている 「顔認識用の xml ファイル」 haarcascade_frontalface_alt.xml を main.cpp と同じフォルダにコピーします。 そして、プロジェクトに追加します。
  3. main.cppの内容を以下のように変更します。
  4. main.cpp (赤字の部分)
    #include <iostream>
    #include <sstream>
    
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    
    void doJob() {
      string path = "";
      string cascadeName = "haarcascade_frontalface_alt.xml";
      cv::CascadeClassifier cascade;
      if (!cascade.load(path + cascadeName)) throw runtime_error(cascadeName + " not found");
    
      cv::VideoCapture cap(0);
      if (!cap.isOpened()) throw runtime_error("VideoCapture open failed");  
      cv::Mat image;
      cv::Mat gray;
      while (1) {
        cap >> image;
        cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
        equalizeHist(gray, gray);
        vector<cv::Rect> founds;
        cascade.detectMultiScale(gray, founds, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));
        for (auto faceRect: founds) {
          cv::rectangle(image, faceRect, cv::Scalar(0, 0, 255), 2);
        }
        cv::imshow("video", image);
        auto key = cv::waitKey(1);
        if (key == 'q') break;
      }
      cv::destroyAllWindows();
    }
    
    int main(int argc, char** argv) {
      try {
        doJob();
      }
      catch (exception &ex) {
        cout << ex.what() << endl;
        string s;
        cin >> s;
      }
      return 0;
    }
    
  5. プログラムを実行するとRGB画像が表示されます。"q"キーで終了します。



  6. サンプルのプロジェクトはこちら


http://ynitta.com/