【OpenCV】 画像から顔を検出する
OpenCVの復習が必要になったのでメモしておきます。
// グレースケールで画像を読み込む UMat source; imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source); if (source.empty()) { throw runtime_error("Failed to open image"); } // 輝度平滑化を行う equalizeHist(source, source); // 顔検出器の作成(xmlはOpenCVをインストールしたフォルダのsources/data/haarcascadesにある) CascadeClassifier faceDetector("haarcascade_frontalface_alt.xml"); if (faceDetector.empty()) { throw runtime_error("Failed to open xml"); } // 顔を検出する double scaleFactor = 1.1; // 各スケール毎に画像が縮小される割合 int minNeighbors = 3; // ? int flag = 0; // 今は使用されていないのでどんな値でも良い Size minSize = Size(source.cols/4, source.rows/4); // オブジェクトの最小サイズ Size maxSize = Size(source.cols/1.5, source.rows/1.5); // オブジェクトの最大サイズ vector<Rect> faces; faceDetector.detectMultiScale(source, faces, scaleFactor, minNeighbors, flag, minSize, maxSize); // 検出した顔に目印を付ける UMat destination = source.clone(); int radius = 8; Scalar color = Scalar(255, 255, 0); int thickness = 2; for (int i = 0; i < faces.size(); ++i) { Point p1 = Point(faces[i].x, faces[i].y); Point p2 = Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height); rectangle(destination, p1, p2, color, thickness); } imshow("source", source); imshow("destination", destination);
さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング
- 作者: 北山洋幸
- 出版社/メーカー: カットシステム
- 発売日: 2016/04
- メディア: 単行本
- この商品を含むブログ (1件) を見る