How to scale image using eye tracking in WPF?

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

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 } } } 
+4
source share
1 answer

This is not WPF, this is a WinForms application. ImageViewer is a class provided by EmguCV that inherits from System.Windows.Forms.Form , not a single WPF goes to them.

You will need to create a new WPF project, integrate your code and create your own WPF view to place the image, where you can set transformations on the elements of the document.

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

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

Source: https://habr.com/ru/post/1341902/


All Articles