private void OnSmileAction(Mat frame, FrameRect face, FrameRect smile, FrameRect selectArea) { if (!smileState.isStart && isSelect) { smileState.Start(); } }
//private bool isPeopleSpan = false; private void Capture_ImageGrabbed(object sender, EventArgs e) { Mat frame = new Mat(); capture.Retrieve(frame, 0); //接收数据 var showFrame = frame.Clone(); FrameRect face, smile, selectArea; if (showRateIndex == 0 || showRateIndex % showRate == 0) { face = getFace(frame); selectArea = getSelectArea(frame, face); smile = getSmile(frame, face); if (face != null) { preFace = face; } preSmile = smile; preSelectArea = selectArea; } else { face = preFace; selectArea = preSelectArea; smile = preSmile; } face = face == null ? preFace : face; Graphics g = Graphics.FromImage(showFrame.Bitmap); if (face != null) { DrawHat(preFace.rect, g); g.DrawRectangle(new Pen(Color.Red, 3), face.rect); } if (smile != null) { showRateIndex++; OnSmileAction(frame, face, smile, selectArea); if (isSelect) { resFrame = frame; resSelectArea = selectArea; resSelectFace = face; Image <Rgba, byte> rgbaImg = frame.ToImage <Rgba, byte>().Copy(selectArea.rect); Graphics g_pic = Graphics.FromImage(rgbaImg.Bitmap); //DrawHat(new Rectangle(face.rect.X - selectArea.rect.X, face.rect.Y - selectArea.rect.Y, face.rect.Width, face.rect.Height), g_pic); imageBox_pic.Image = rgbaImg; } g.DrawRectangle(new Pen(Color.Blue, 3), smile.rect); } imageBox_cap.Image = showFrame; //显示图像 }
private FrameRect getFace(Mat frame) { FrameRect face = null; using (UMat ugray = new UMat()) { CvInvoke.CvtColor(frame, ugray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray); //灰度化图片 CvInvoke.EqualizeHist(ugray, ugray); //均衡化灰度图片 Rectangle[] facesDetected = faceClassifier.DetectMultiScale(ugray, 1.1, 10, new System.Drawing.Size(20, 20)); if (facesDetected != null && facesDetected.Length > 0) { face = new FrameRect(getMaxRectangle(facesDetected).rect); } } return(face); }
private FrameRect getSelectArea(Mat frame, FrameRect face) { if (face == null) { return(null); } int leftRightWidth = (imgWidth - face.rect.Width) / 2; int topWidth = (imgHeigth - face.rect.Height) / 2; int x, y = 0; x = face.rect.X - leftRightWidth < 0 ? 0 : face.rect.X - leftRightWidth; y = face.rect.Y - topWidth < 0 ? 0 : face.rect.Y - topWidth; x = x + imgWidth > frame.Width ? frame.Width - imgWidth : x; y = y + imgHeigth > frame.Height ? frame.Height - imgHeigth : y; FrameRect rect = new FrameRect(new Rectangle(x, y, imgWidth, imgHeigth)); return(rect); }
private FrameRect getSmile(Mat frame, FrameRect face) { if (face == null) { return(null); } Image <Gray, byte> tempImg = frame.ToImage <Gray, byte>(); Rectangle halfFace = new Rectangle(face.rect.X + face.rect.Width / 5, face.rect.Y + face.rect.Height * 3 / 5, face.rect.Width * 3 / 5, face.rect.Height * 2 / 5); Image <Gray, byte> grayFace = tempImg.Copy(halfFace); //imageBox2.Image = grayFace; FrameRect smile = null; Rectangle[] smileDetected = smileClassifier.DetectMultiScale(grayFace, 1.16, 35, new System.Drawing.Size(25, 25)); if (smileDetected != null && smileDetected.Length > 0) { smile = new FrameRect(getMaxRectangle(smileDetected).rect); smile.rect.X += halfFace.X; smile.rect.Y += halfFace.Y; } return(smile); }
public bool SaveSelectAreaImg(string tel, Mat frame, FrameRect selectArea, string name) { var rgbFrameImg = frame.ToImage <Rgba, byte>(); string strencode = ""; byte[] utf8 = Encoding.UTF8.GetBytes(name); name = Encoding.UTF8.GetString(utf8); if (selectArea != null) { var selectImg = rgbFrameImg.Copy(selectArea.rect).Bitmap; string path = imgPath + "/" + name; //selectImg.Save(path); selectImg.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg); if (openFtp != 0) { upload(path); } return(true); } return(false); }
private void saveFace(Mat frame, FrameRect face) { if (face == null) { return; } if (!status) { return; } if (index >= 10) { status = false; MessageBox.Show("完成"); return; } Image <Gray, byte> tempImg = frame.ToImage <Gray, byte>(); Image <Gray, byte> grayFace = tempImg.Copy(face.rect).Resize(200, 200, Inter.Linear); grayFace.Save("./face_train/" + textBox1.Text + "_" + index + ".jpg"); index++; }