void timer_Tick(object sender, EventArgs e)
        {
            Image <Bgr, byte> currentFrame = null;

            if (capture != null)
            {
                currentFrame = capture.QueryFrame().ToImage <Bgr, byte>();
            }
            else if (capture == null)
            {
                currentFrame = loadedImage.ToImage <Bgr, byte>();
            }
            if (currentScreen != null)
            {
                Mat frame = currentFrame.Mat;
                frame = ImageProcessor.WarpPerspective(frame, Utils.GetPoints(currentScreen.coordinates));

                SetImageAndCanvasSize(frame.Height, frame.Width);
                currentFrame = frame.ToImage <Bgr, byte>();
            }

            if (currentFrame != null)
            {
                image1.Source = Utils.ToBitmapSource(currentFrame);
            }
        }
        private void BtnRunTests_Click(object sender, RoutedEventArgs e)
        {
            bool success = true;

            if (currentScreen != null)
            {
                List <Dial> dials = currentScreen.dials;

                if (dials.Count != 0)
                {
                    tree.Items.Clear();
                    foreach (Dial dial in dials)
                    {
                        Mat    image       = ImageProcessor.WarpPerspective(selectedScreen, Utils.GetPoints(dial.coordinates));
                        Mat    binaryImage = ImageProcessor.PreprocessImageForTesseract(image);
                        String tessResult  = Utils.GetTesseractResult(binaryImage.Bitmap);
                        if (tessResult == "")
                        {
                            tessResult = "Tesseract couldn't get any result";
                        }

                        if (tessResult.TrimEnd('\r', '\n') == dial.ExpectedValue)
                        {
                            UpdateTreeViewItem(dial, "Run Value: " + tessResult.TrimEnd('\r', '\n'), "The values are the same");
                        }
                        else
                        {
                            success = false;
                            UpdateTreeViewItem(dial, "Run Value: " + tessResult.TrimEnd('\r', '\n'), "The values are not the same");
                        }
                    }

                    if (success == true)
                    {
                        System.Windows.Forms.MessageBox.Show("The run was a success", "Run test", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        System.Windows.Forms.MessageBox.Show("One or more runs have failed", "Run test", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    System.Windows.MessageBox.Show("This screen has no dial defined", "Info", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
            else
            {
                System.Windows.MessageBox.Show("You have to define or load a screen", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            ResetAll();
            OpenFileDialog openDialog = new OpenFileDialog();

            openDialog.Title  = "Load the Display Definition";
            openDialog.Filter = "Json|*.json";
            openDialog.ShowDialog();


            if (openDialog.FileName != "")
            {
                System.IO.FileStream       fs = (System.IO.FileStream)openDialog.OpenFile();
                DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Screen));
                currentScreen  = (Screen)js.ReadObject(fs);
                selectedScreen = ImageProcessor.WarpPerspective(GetCurrentImage().Mat, Utils.GetPoints(currentScreen.coordinates));
                string path = openDialog.FileName.Split('.')[0];
                currentScreen.LoadTemplate();

                currentScreen.dials.ForEach(dial => { AddTreeView(dial); });
            }
        }
        private void MainCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (add_markers == true && currentScreen == null)
            {
                if (num_of_clicks < 4)
                {
                    System.Windows.Shapes.Ellipse ellipse = new System.Windows.Shapes.Ellipse();
                    AddEllipse(ellipse);
                    Point point = new Point(Mouse.GetPosition(image1).X, Mouse.GetPosition(image1).Y);
                    Canvas.SetLeft(ellipse, point.X);
                    Canvas.SetTop(ellipse, point.Y);
                    markers.Add(point);
                    num_of_clicks++;
                }

                if (num_of_clicks == 4)
                {
                    currentScreen             = new Screen("selectedScreen");
                    currentScreen.coordinates = markers;
                    Image <Bgr, byte> currentFrame = GetCurrentImage();
                    Mat img  = currentFrame.Mat;
                    Mat warp = ImageProcessor.WarpPerspective(img, Utils.GetPoints(currentScreen.coordinates));
                    selectedScreen = warp;
                    btnAddDialMarkers.IsEnabled = true;
                    btn_AddMarkers.IsEnabled    = false;
                    add_markers = false;
                    ResetMarkers();
                    num_of_clicks = 0;
                }
            }
            else if (add_markers)
            {
                if (num_of_clicks < 4)
                {
                    System.Windows.Shapes.Ellipse ellipse = new System.Windows.Shapes.Ellipse();
                    AddEllipse(ellipse);
                    Point point = new Point(Mouse.GetPosition(image1).X, Mouse.GetPosition(image1).Y);
                    Canvas.SetLeft(ellipse, point.X);
                    Canvas.SetTop(ellipse, point.Y);
                    markers.Add(point);
                    num_of_clicks++;
                }
                if (num_of_clicks == 4)
                {
                    TreeViewItem treeItemTest = new TreeViewItem();

                    /*Image<Bgr, byte> currentFrame = GetCurrentImage();
                     * Mat img = currentFrame.Mat;*/
                    Mat warp = ImageProcessor.WarpPerspective(selectedScreen, Utils.GetPoints(markers));

                    try { dialDefinition = new DialDefinition(warp); dialDefinition.Owner = GetWindow(this); dialDefinition.ShowDialog(); }
                    catch (Exception ex)
                    {
                        System.Windows.MessageBox.Show("A handled exception just occurred: " + ex.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }

                    //Checks the value transmited from the dial definition window that the values are not null
                    if (dialDefinition.CadranName.Text != "" && dialDefinition.CadranType.Text != "")
                    {
                        ResetMarkers();
                        Dial dial = new Dial(dialDefinition.CadranName.Text, dialDefinition.CadranType.Text, dialDefinition.ExpectedValue.Text, markers);
                        currentScreen.dials.Add(dial);
                        num_of_clicks = 0;
                        markers.Clear();
                        //Add elements in the treeview
                        AddTreeView(dial);
                    }
                    else
                    {
                        ResetMarkers();
                        markers.Clear();
                        num_of_clicks = 0;
                    }
                }
            }
        }