SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

OpenCvSharpで顔検出

今度は顔検出をやってみました。

OpenCvSharpのサンプルコードをベースにちょっと書き換えただけですが、意外とシンプルなコードで書けるもんですね。

今回は程よいサンプル画像がないので、コードだけφ(..)メモメモ

        static void Main(string[] args)
        {
            // カスケード分類器の準備
            var haarCascade = new CascadeClassifier("Data/haarcascade_frontalface_default.xml");

            using (var src = new Mat("Images/2.jpg"))
            using (var gray = new Mat())
            {
                var result = src.Clone();
                Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);

                // 顔検出
                Rect[] faces = haarCascade.DetectMultiScale(
                    gray, 1.08, 2, HaarDetectionType.FindBiggestObject, new Size(50, 50));

                // 検出した顔の位置に円を描画
                foreach (Rect face in faces)
                {
                    var center = new Point
                    {
                        X = (int)(face.X + face.Width * 0.5),
                        Y = (int)(face.Y + face.Height * 0.5)
                    };
                    var axes = new Size
                    {
                        Width = (int)(face.Width * 0.5),
                        Height = (int)(face.Height * 0.5)
                    };
                    Cv2.Ellipse(result, center, axes, 0, 0, 360, new Scalar(255, 0, 255), 4);
                }

                using (new Window("result", result))
                {
                    Cv2.WaitKey();
                }
            }
        }