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
精彩评论