Нарушение прав доступа / Программа не отвечает при сопоставлении шаблона из захвата камеры. (C# EmguCV)

Вот код, который я сейчас использую в C# и EmguCV:

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;
using Emgu.Util;

namespace CameraCapture
{
 public partial class CameraCapture : Form
{
    //declaring global variables
    private Capture capture;        //takes images from camera as image frames
    private bool captureInProgress; // checks if capture is executing

    public CameraCapture()
    {
        InitializeComponent();
    }

    private void ProcessFrame(object sender, EventArgs arg)
    {
        Image<Bgr, Byte> ImageFrame = capture.QueryFrame();
        Image<Bgr, Byte> template = new Image<Bgr, byte>(@"D:\yugiCards\kuriboh.jpg");
        Image<Bgr, Byte> imageToShow = ImageFrame.Copy();


        using (Image<Gray, float> result = imageToShow.MatchTemplate(template, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED))
        {
            double[] minValues, maxValues;
            Point[] minLocations, maxLocations;
            result.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);

            // You can try different values of the threshold. I guess somewhere between 0.75 and 0.95 would be good.
            if (maxValues[0] > 0.9)
            {
                // This is a match. Do something with it, for example draw a rectangle around it.
                Rectangle match = new Rectangle(maxLocations[0], template.Size);
                imageToShow.Draw(match, new Bgr(Color.Red), 3);
            }
        }

        CamImageBox.Image = imageToShow; 
        //ImageFrame.Save(@"E:\MyPic.jpg");  //saves to location
    }

    private void CameraOutput_Load(object sender, EventArgs e)
    {

    }

    private void btnStart_Click(object sender, EventArgs e)
    {
        #region if capture is not created, create it now
        if (capture == null)
        {
            try
            {
                capture = new Capture();
            }
            catch (NullReferenceException excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }
        #endregion

        if (capture != null)
        {
            if (captureInProgress)
            {  //if camera is getting frames then stop the capture and set button Text
                // "Start" for resuming capture
                btnStart.Text = "Start!"; //
                Application.Idle -= ProcessFrame;
            }
            else
            {
                //if camera is NOT getting frames then start the capture and set button
                // Text to "Stop" for pausing capture
                btnStart.Text = "Stop";
                Application.Idle += ProcessFrame;
            }

            captureInProgress = !captureInProgress;
        }
    }

    private void ReleaseData()
    {
        if (capture != null)
            capture.Dispose();
    }

}
}

Я пытаюсь найти шаблон в захвате камеры, однако, когда я запускаю программу и запускаю захват камеры, светодиод моей камеры загорается, а затем программа перестает отвечать на запросы при попытке захвата. Может быть, это связано с размещением функции шаблона соответствия или типов используемых переменных, но я не совсем уверен, так как у меня нет такого опыта, поэтому я хотел немного узнать о проблеме с моим кодом.

Я понимаю, что переменная imageToShow не нужна, но я решила оставить ее так, пока я не смогу заставить ее работать, и тогда я сам смогу больше возиться с ней.

Код для обнаружения шаблона был найден здесь emgu поиск изображения a в изображении b

Это было главным образом для обнаружения шаблона между 2 статическими изображениями, хотя, но я отредактировал источник, чтобы быть от веб-камеры.

Веб-камера работает нормально, когда я удаляю из кода сегмент использования шаблона соответствия.

Любой вклад будет оценен, спасибо и извините, если это очевидная ошибка, я все еще новичок в такого рода вещи.

РЕДАКТИРОВАТЬ: забыл упомянуть, что выдает эту ошибку при отладке программы

 '[6164] CameraCapture.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.

1 ответ

Решено, что после нескольких часов попыток возиться с кодом оказалось, что используемый шаблон просто не был хорошим.

После более подробного изучения того, что сказал автор кода, он упомянул, что вам может потребоваться серый цвет вокруг вашего шаблона, и подумал, что он имеет в виду Bgr для Грея, поэтому я разочаровался в коде. Оказалось, это означало, что вам буквально нужен серый цвет вокруг шаблона.

Другие вопросы по тегам