EmguCV Попытка чтения или записи в защищенную память - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть следующий код для отображения изображения в imagebox с помощью EmgucV:

    Capture capture;
    Image<Bgr, Byte> image;

    public Form1()
    {
        InitializeComponent();
        Application.Idle += new EventHandler(Start);
    }
    void Start(object sender, EventArgs e)
    {
        capture = new Capture();
        image = capture.QueryFrame();
        imageBox1.Image = image;
    }

Я получаю исключение Attempted to read or write protected memory.Что мне нужно сделать, чтобы исправить это?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Это признак возможной утечки памяти

Я думаю, что в вашем коде есть ошибка.Ваш метод Start будет вызываться много раз (очень часто) в течение срока службы приложения.

Похоже, что вы должны использовать только один объект Capture в своем приложении.

Просто переместите свою реализацию Capture в конструктор Form:

Capture capture;

public Form1()
{
    InitializeComponent();
    Application.Idle += new EventHandler(Capture);
    capture = new Capture();
}
void Capture(object sender, EventArgs e)
{
    imageBox1.Image = capture.QueryFrame(); 
}
0 голосов
/ 01 сентября 2018

Текущее исправление для Emgu CV версии 3.4.1 с использованием Windows Form c #;добавьте одну кнопку, назовите ее btnCapture, добавьте один элемент управления PictureBox и оставьте имя по умолчанию для целей этого ответа.надеюсь, этот пример кода поможет

    public VideoCapture capture;
    private void btnCatpure_Click(object sender, EventArgs e)
    {
        // each click a single frame will be capture and then display in the control.
        Mat iframe = new Mat();
        capture.Retrieve(iframe, 0);
        Mat grayFrame = new Mat();
        CvInvoke.CvtColor(iframe, grayFrame, ColorConversion.Bgr2Gray);

        pictureBox1.Image =  iframe.Bitmap;
        pictureBox1.Image = grayFrame.Bitmap;
    }
...