public ActionResult UploadFace(int?id) { ActionResult res = AjaxSubmit(id); // string message = System.Web.HttpContext.Current.Request.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath); // Response.Write("<script language=VBScript>MsgBox " + message + "</script>"); if ((Session["ContentStream"] != null) && (Session["ContentStream"].GetType() == typeof(byte[]))) { byte[] arr = (byte[])Session["ContentStream"]; OpenCvSharp.IplImage[] imgs = null; OpenCvSharp.IplImage img = support.ByteArrayToIplImage(arr, OpenCvSharp.LoadMode.Unchanged); if (img != null) { imgs = HaarCascade.GetFaces(img); } if (imgs != null && imgs.Length > 0) { Session["ContentStream"] = support.IplImageToByteArray(imgs[0]); Session["ContentLength"] = imgs[0].ImageSize; } else { Session["ContentLength"] = null; Session["ContentStream"] = null; Response.Write("error"); return(null); } OpenCvSharp.Cv.ReleaseImage(img); } return(res); }
public void Dispose() { if (this.ipl != null) { this.ipl.Dispose(); this.ipl = null; } if (this.stream != null) { this.stream.Dispose(); this.stream = null; } }
/// <summary> /// Take a picture and apply Force Field Transform on it. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonPicture_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; DialogResult result = ofd.ShowDialog(); if (result != System.Windows.Forms.DialogResult.OK) { return; } OpenCvSharp.IplImage image = OpenCvSharp.IplImage.FromFile(ofd.FileName); tracking.TransformImage(image); }
public static OpenCvSharp.IplImage SubImage( this OpenCvSharp.IplImage whole, OpenCvSharp.CvRect region) { whole.SetROI(region); OpenCvSharp.IplImage part = new OpenCvSharp.IplImage(new OpenCvSharp.CvSize(region.Width, region.Height), whole.Depth, whole.NChannels); whole.Copy(part); whole.ResetROI(); return part; }
private void CompareFace( Damany.Util.DateTimeRange range, OpenCvSharp.IplImage targetImage, OpenCvSharp.CvRect rect) { try { IsRunning = true; targetImage.ROI = rect; int count = 0; var gray = targetImage.GetSub(rect).CvtToGray(); var poi = new PersonOfInterest(targetImage, gray); var repo = new PersonOfInterest[] { poi }; this._comparer.Load(repo.ToList()); //foreach (var p in portraits) //{ // if (Exit) // { // break; // } // this.view.CurrentImage = p.GetIpl().ToBitmap(); // var colorImg = p.GetIpl(); // var imgFromRepository = colorImg.GetSub(p.FaceBounds).CvtToGray(); // var result = this._comparer.CompareTo(imgFromRepository); // foreach (var repositoryCompareResult in result) // { // if (repositoryCompareResult.Similarity > Thresholds[ThresholdIndex]) // { // count++; // this.view.AddPortrait(p); // this.view.SetStatusText(string.Format("检索到 {0} 个目标", count)); // } // } //} } finally { IsRunning = false; } }
public ActionResult UpdateAvatar(int?id) { ActionResult res = AjaxSubmit(id); if ((Session["PersonForReview"] != null) && (Session["ContentStream"] != null) && (Session["PersonForReview"].GetType() == typeof(MembershipPerson)) && (Session["ContentStream"].GetType() == typeof(byte[]))) { OpenCvSharp.IplImage img = support.ByteArrayToIplImage(Session["ContentStream"] as byte[], OpenCvSharp.LoadMode.Unchanged); if (img == null) { return(res); } img = ((OpenCvSharp.CPlusPlus.Mat)OpenCvSharp.Cv.EncodeImage(".jpg", img)).ToIplImage(); byte[] buf = support.IplImageToByteArray(img); Session["ContentStream"] = buf; Session["ContentLength"] = buf.Length; (Session["PersonForReview"] as MembershipPerson).person.Avatar = buf; } return(res); }
public static bool FaceRecognizeAndSaveResults(OpenCvSharp.IplImage input, string saveDir, string filePahtPrefix) { input.SaveImage(System.IO.Path.GetFullPath("../python/input.png")); List <Tuple <string, RectangleF> > facesInfo = new List <Tuple <string, RectangleF> >(); if (false == FaceRecognizeAndSaveResultsCommon(saveDir, filePahtPrefix, facesInfo)) { return(false); } foreach (var info in facesInfo) { string savePath = info.Item1; RectangleF face = info.Item2; using (var faceImage = input.Clone(new OpenCvSharp.CvRect((int)face.X, (int)face.Y, (int)face.Width, (int)face.Height))) { faceImage.SaveImage(savePath); } } return(true); }
private void choosePic_Click(object sender, EventArgs e) { if (this.openFileDialog1.ShowDialog(this) == DialogResult.Cancel) { return; } var img = Damany.Util.Extensions.MiscHelper.FromFileBuffered(this.openFileDialog1.FileName); this.ipl = OpenCvSharp.IplImage.FromBitmap((Bitmap)img); var fs = new FaceProcessingWrapper.FaceSpecification(); var suc = _faceComparer.CalcFeature(this.ipl, fs); if (!suc) { MessageBox.Show("人像不满足比对要求,请重新选择人像。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } this.targetPic.Image = img; this.targetPic.Invalidate(); this.compareButton.Enabled = true; }
// Watershedアルゴリズムによる画像の領域分割 // パラメータ: 分割数(横), 分割数(縦), マーカサイズ private OpenCvSharp.CPlusPlus.Mat procWatershed(OpenCvSharp.CPlusPlus.Mat matSrc, int wdiv, int hdiv, int msize) { // Matの準備 OpenCvSharp.CPlusPlus.Mat matDst = matSrc.Clone(); // IplImageの準備(C API用) OpenCvSharp.IplImage iplSrc = matSrc.ToIplImage(); OpenCvSharp.IplImage iplDst = iplSrc.Clone(); // マーカ画像の準備 OpenCvSharp.IplImage iplMarker = new OpenCvSharp.IplImage(iplSrc.Size, OpenCvSharp.BitDepth.S32, 1); iplMarker.Zero(); // マーカ設置(等分割) OpenCvSharp.CvPoint[,] mpt = new OpenCvSharp.CvPoint[wdiv, hdiv]; for (int i = 0; i < wdiv; i++) { for (int j = 0; j < hdiv; j++) { mpt[i, j] = new OpenCvSharp.CvPoint((int)(iplSrc.Width / wdiv * (i + 0.5)), (int)(iplSrc.Height / hdiv * (j + 0.5))); iplMarker.Circle(mpt[i, j], msize, OpenCvSharp.CvScalar.ScalarAll(i * wdiv + j), OpenCvSharp.Cv.FILLED, OpenCvSharp.LineType.Link8, 0); } } // 分割実行 OpenCvSharp.Cv.Watershed(iplSrc, iplMarker); // マーカの描画 for (int i = 0; i < wdiv; i++) { for (int j = 0; j < hdiv; j++) { iplDst.Circle(mpt[i, j], msize, OpenCvSharp.CvColor.White, 3, OpenCvSharp.LineType.Link8, 0); } } // 領域境界の描画 for (int i = 0; i < iplMarker.Height; i++) { for (int j = 0; j < iplMarker.Width; j++) { int idx = (int)(iplMarker.Get2D(i, j).Val0); if (idx == -1) { iplDst.Set2D(i, j, OpenCvSharp.CvColor.Red); } } } // IplImage -> Matに戻す matDst = new OpenCvSharp.CPlusPlus.Mat(iplDst); return matDst; }