Как масштабировать изображение, используя отслеживание глаз в WPF? - PullRequest
4 голосов
/ 02 марта 2011

Я пытаюсь увеличивать и уменьшать каждый кадр из живого видеопотока с веб-камеры, открывая или прищурив глаза. У меня уже есть часть отслеживания глаз, но я не могу понять, куда вписаться в ScaleTransform. Ниже приведен существующий код, который у меня есть:

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.Blue), 2);
                  }


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

1 Ответ

2 голосов
/ 02 марта 2011

Это не WPF, это приложение WinForms. ImageViewer - это класс, предоставляемый EmguCV, который наследуется от System.Windows.Forms.Form, и WPF для них не используется.

Вам потребуется создать новый проект WPF, интегрировать свой код и создать собственное представление WPF для размещения изображения, где вы можете затем установить преобразования для элементов документа.

Если вы просто хотите использовать средство просмотра WinForms, вы можете сослаться на свойство ImageViewer::ImageBox. Класс ImageBox имеет встроенную поддержку масштабирования и панорамирования. Он имеет свойство ZoomScale, которое можно установить программно, а также дает вам доступ к свойствам HorizontalScrollBar и VerticalScrollBar для управления местоположением панорамирования.

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