直接上代码
FrameSource cameraSource = FrameSource.CreateFrameSource_Camera(0);
while (true)
{
Mat frame = new Mat();
CascadeClassifier faceCascade = new CascadeClassifier("haarcascade_eye_tree_eyeglasses.xml");
float scalingFactor = 0.75f;
cameraSource.NextFrame(frame);
Cv2.Resize(frame, frame, new Size(), scalingFactor, scalingFactor, InterpolationFlags.Area);
Mat frameGray = frame.CvtColor(ColorConversionCodes.BGR2GRAY);
frameGray = frameGray.EqualizeHist();// 均衡直方图,防止太亮或太暗,影响检测效果
Rect[] faces = faceCascade.DetectMultiScale(frameGray, 1.1, 2, HaarDetectionType.ScaleImage, new Size(30, 30));
Mat result = frameGray.Clone();
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);
}
Cv2.ImShow("Faces by Haar", result);
Cv2.WaitKey(20);
}
非常简单,直接使用前人训练出来的模型进行detect即可。
至于haar模型的训练,参见
https://blog.csdn.net/sazass/article/details/93073840