Как нарисовать прямоугольник с помощью мыши в C # (emgucv)? - PullRequest
0 голосов
/ 24 марта 2012

Я хочу нарисовать прямоугольник, используя мышь на видеокадре (то есть в графическом окне), точно так же, как когда мы выбираем любые файлы. Пользователь нажимает кнопку мыши, выбирает область и отпускает кнопку мыши. Так же, как обрезка или обрезка!

Я использую emgucv!

Ответы [ 2 ]

0 голосов
/ 30 января 2018
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.Structure;

namespace Emgucv33Apps
{
public partial class FormCropImage : Form
{
    Image<Bgr, byte> imgInput;
    Rectangle rect;
    Point StartLocation;
    Point EndLcation;
    bool IsMouseDown = false;

    public FormCropImage()
    {
        InitializeComponent();
    }

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        if (ofd.ShowDialog()==DialogResult.OK)
        {
            imgInput = new Image<Bgr, byte>(ofd.FileName);
            pictureBox1.Image = imgInput.Bitmap;
        }
    }

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        IsMouseDown = true;
        StartLocation = e.Location;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (IsMouseDown==true)
        {
            EndLcation = e.Location;
            pictureBox1.Invalidate();
        }
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        if (rect!=null)
        {
            e.Graphics.DrawRectangle(Pens.Red, GetRectangle());
        }
    }

    private Rectangle GetRectangle()
    {
        rect = new Rectangle();
        rect.X = Math.Min( StartLocation.X,EndLcation.X);
        rect.Y = Math.Min(StartLocation.Y, EndLcation.Y);
        rect.Width = Math.Abs(StartLocation.X - EndLcation.X);
        rect.Height = Math.Abs(StartLocation.Y - EndLcation.Y);

        return rect;
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if (IsMouseDown==true)
        {
            EndLcation = e.Location;
            IsMouseDown = false;
            if (rect!=null)
            {
                imgInput.ROI = rect;
                Image<Bgr, byte> temp = imgInput.CopyBlank();
                imgInput.CopyTo(temp);
                imgInput.ROI = Rectangle.Empty;
                pictureBox2.Image = temp.Bitmap;
            }
        }
    }
}
}
0 голосов
/ 24 марта 2012

Просто используйте метод Image<B, T>.Draw. Это показано в Обнаружении формы в примере кода C # . Вот фрагмент по ссылке:

Image<Bgr, Byte> triangleRectangleImage = img.CopyBlank();
foreach (MCvBox2D box in boxList)
   triangleRectangleImage.Draw(box, new Bgr(Color.DarkOrange), 2);
...