开发者

How to scale an image using eye tracking in WPF?

I'm trying to zoom in and out each frame from a live video stream from a webcam, by opening or squinting my eyes. I already have the eye tracking part working, but I can't figure out where to fit in the ScaleTransform. Below is the existing code I have:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Emgu.CV.Structure;
using Emgu.CV.UI;
using Emgu.CV;
using System.Drawing;
using System.Diagnostics;
using System.Windows.Media;

namespace eyeDetection
{
   static class Program
   {
      /// <summary>
      /// The main entry point for the application.
      /// </summary>
      [STAThread]
      static void Main()
      {
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         Run();
      }

      static void Run()
      {
          ImageViewer viewer = new ImageViewer(); //create an image viewer
          Capture capture = new Capture(); //create a camera capture
          Application.Idle += new EventHandler(delegate(object sender, EventArgs e)
              {   // run this until application closed (close button click on image viewer)
                  Image<Bgr, Byte> image = capture.QueryFrame();
                  Image<Gray, Byte> gray = image.Convert<Gray, Byte>(); //Convert it to Grayscale

                  Stopwatch watch = Stopwatch.StartNew();
                  //normalizes brightness and increases contrast of the image
                  gray._EqualizeHist();

                  //Read the HaarCascade objects
                 HaarCascade eye = new HaarCascade("haarcascade_eye.xml");

                 MCvAvgComp[][] eyeDetected = gray.DetectHaarCascade(
                     eye,
                     1.1,
                     10,
                     Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                     new Size(20, 20));

                  foreach (MCvAvgComp e in eyeDetected[0])
                  {
                      //draw the eyes detected in the 0th (gray) channel with blue color
                      image.Draw(e.rect, new Bgr(Color.Bl开发者_JAVA百科ue), 2);
                  }


                    watch.Stop();
                  //display the image 
                  viewer.Image = image; //draw the image obtained from camera
              });
          viewer.ShowDialog(); //show the image viewer
      }
   }
}


This is not WPF, it's a WinForms application. ImageViewer is a class provided by EmguCV that inherits from System.Windows.Forms.Form, no WPF going on their either.

You're going to need to create a new WPF project, integrate your code, and create your own WPF view to host the image where you can then set transforms on elements of the document.

If you just want to use the WinForms viewer, you can reference the ImageViewer::ImageBox property. The ImageBox class has native support for zooming and panning. It has a ZoomScale property which can be set programmatically, and also gives you access to the HorizontalScrollBar and VerticalScrollBar properties to control the pan location.

viewer.ImageBox.ZoomScale = 2.0;  // zoom in by 2x
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜