//开始测量 private void Measure_Click(object sender, EventArgs e) { AddButton.Invoke(sender, EventArgs.Empty); }
private void ProcessFrame(object sender, EventArgs e) { //capturing video if (videoCapture != null && videoCapture.Ptr != IntPtr.Zero) { videoCapture.Retrieve(frame, 0); currentFrame = frame.ToImage <Bgr, Byte>().Resize(CaptureCamera.Width, CaptureCamera.Height, Inter.Cubic); //Detecting face if (facesDetectionEnabled) { //Converting from blue green red format to grey picture format Mat grayImage = new Mat(); CvInvoke.CvtColor(currentFrame, grayImage, ColorConversion.Bgr2Gray); //Enhance for better image quality CvInvoke.EqualizeHist(grayImage, grayImage); Rectangle[] faces = faceCasacdeClassifier.DetectMultiScale(grayImage, 1.1, 3, Size.Empty, Size.Empty); if (faces.Length > 0) { foreach (var face in faces) { //Adding Preson profile Image <Bgr, Byte> resultImage = currentFrame.Convert <Bgr, Byte>(); resultImage.ROI = face; Detected.SizeMode = PictureBoxSizeMode.StretchImage; Detected.Image = resultImage.Bitmap; if (EnableSaveImage) { string path = Directory.GetCurrentDirectory() + @"\TrainedImages"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } //saving 10 images with certain delay Task.Factory.StartNew(() => { for (int i = 0; i < 10; i++) { resultImage.Resize(200, 200, Inter.Cubic).Save(path + @"\" + PersonName.Text + "_" + DateTime.Now.ToString("dd-mm-yyyy-hh-mm-ss") + ".jpg"); Thread.Sleep(1000); } }); } EnableSaveImage = false; if (AddButton.InvokeRequired) { AddButton.Invoke(new ThreadStart(delegate { AddButton.Enabled = true; })); } // recognizing face if (isTrained) { Image <Gray, Byte> grayFaceResult = resultImage.Convert <Gray, Byte>().Resize(200, 200, Inter.Cubic); CvInvoke.EqualizeHist(grayFaceResult, grayFaceResult); var result = recognizer.Predict(grayFaceResult); pictureBox1.Image = grayFaceResult.Bitmap; pictureBox2.Image = TrainedFaces[result.Label].Bitmap; Debug.WriteLine(result.Label + ". " + result.Distance); if (result.Label != -1 && result.Distance < 2000) { CvInvoke.PutText(currentFrame, PersonsNames[result.Label], new Point(face.X - 2, face.Y - 2), FontFace.HersheyComplex, 1.0, new Bgr(Color.Orange).MCvScalar); CvInvoke.Rectangle(currentFrame, face, new Bgr(Color.Green).MCvScalar, 2); } else { CvInvoke.PutText(currentFrame, "Unknown", new Point(face.X - 2, face.Y - 2), FontFace.HersheyComplex, 1.0, new Bgr(Color.Orange).MCvScalar); CvInvoke.Rectangle(currentFrame, face, new Bgr(Color.Red).MCvScalar, 2); } } } } } CaptureCamera.Image = currentFrame.Bitmap; } if (currentFrame != null) { currentFrame.Dispose(); } }