//////////////////////////////////////////////////////////////////////////// /// <summary> /// 取出ROI物體圖像 /// </summary> /// <param name="filteredSkinObserved">過濾膚色的圖像</param> /// <returns>回傳物體圖像</returns> private Image <Bgr, Byte> GetObjectBoundingBoxImg(Image <Bgr, Byte> filteredSkinObserved) { //get bounding box Image <Gray, Byte> gray = filteredSkinObserved.Convert <Gray, Byte>(); gray = DetectObjects.DoBinaryThreshold(gray, 0); gray._Erode(5); gray._Dilate(5); new ImageViewer(gray).Show(); Contour <System.Drawing.Point> sceneContours = DetectObjects.DoContours(gray); Contour <System.Drawing.Point> objectBox = DetectObjects.GetMaxContours(sceneContours); Image <Bgr, byte> boxImg = DetectObjects.GetBoundingBoxImage(objectBox, filteredSkinObserved); new ImageViewer(boxImg).Show(); return(boxImg); }
/// <summary> /// 膚色過濾 /// </summary> /// <param name="observed">要對得觀察景象</param> /// <returns>回傳過濾掉的膚色</returns> private Image <Bgr, Byte> SkinFilter(Image <Bgr, Byte> observed) { Image <Bgr, Byte> dst = observed.Copy(); Image <Hsv, Byte> hsv = observed.Convert <Hsv, Byte>(); //皮膚偵測並填為黑 Image <Gray, Byte> skin = new Image <Gray, byte>(observed.Size); CvInvoke.cvInRangeS(hsv, new MCvScalar(0, 58, 89), new MCvScalar(25, 173, 229), skin); skin = FillHoles(skin); skin._Erode(2); skin._Dilate(2); Contour <System.Drawing.Point> skinContours = DetectObjects.DoContours(skin); Contour <System.Drawing.Point> max = DetectObjects.GetMaxContours(skinContours); //new ImageViewer(DetectObjects.DrawMaxContoursOnImg(max, dst)).Show(); dst.Draw(max, new Bgr(0, 0, 0), -1); //new ImageViewer(dst).Show(); return(dst); }
private void drawContoursButton_Click(object sender, RoutedEventArgs e) { contoursImg = morphologyImg.Convert <Bgr, byte>(); contoursImgBox.Image = DetectObjects.DrawAllContoursOnImg(DetectObjects.DoContours(morphologyImg), contoursImg).Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR); }