2011-03-01 103 views
4

我試圖通過打開或眯着眼睛來放大和縮小來自攝像頭的實時視頻流的每個幀。我已經有了眼動追蹤部分,但我無法弄清楚ScaleTransform中的哪個部分。下面是我現有的代碼:如何使用WPF中的眼動跟蹤來縮放圖像?

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 
     } 
    } 
} 
+0

出於好奇,你是如何做眼動追蹤的?你打開採購這個代碼? –

+0

@Richard看起來他正在使用OpenCV項目的C#綁定:http://www.emgu.com/ – joshperry

+0

@joshperry哦,謝謝。我在編輯它之前沒有看到。 –

回答

2

這不是WPF,它是一個WinForms應用程序。 ImageViewer是由EmguCV提供的類,它繼承自System.Windows.Forms.Form,沒有任何WPF正在進行它們。

您將需要創建一個新的WPF項目,整合您的代碼,並創建您自己的WPF視圖來託管圖像,然後您可以在該文檔的元素上設置變換。

如果您只想使用WinForms查看器,則可以引用ImageViewer::ImageBox屬性。 ImageBox類具有對縮放和平移的本地支持。它有一個ZoomScale屬性,它可以通過編程方式進行設置,還可以訪問HorizontalScrollBarVerticalScrollBar屬性來控制平移位置。

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

謝謝!我如何在WinForm中縮放圖像?結合EmguCV即可。 –

+0

@李The ImageViewer具有原生縮放功能,我更新了詳細的答案。 – joshperry