网络摄像头自动捕捉(Emgu.cv) c#。

问题描述 投票:-1回答:1

我有一个项目,当用户在登录表单中错误登录3次时,网络摄像头会自动开始捕捉。它成功地将图像保存在数据库中,但有一个错误是Object Reference not set to an instance of an object。我知道这个问题有很多问题和答案,但我还是解决不了。另一个问题是,当我只是从webcam窗体调试时,它运行得很完美,没有错误信息,但当我从登录窗体调试时,就会出现错误。另一个问题是,它没有显示错误的行,但我确信它来自于这里的某个地方。

private void webcam_Load(object sender, EventArgs e)
       {

           if ((imagecapture == null))
           {
               try
               {
                   imagecapture = new Emgu.CV.VideoCapture();
               }
               catch (Exception ex)
               {
                   MessageBox.Show(ex.Message);
               }

           }
           Application.Idle += new EventHandler(loadimage);
       }

这是loadimage()

public void loadimage(object sender, EventArgs e)
       {
           try
           {
               Emgu.CV.Mat imageviewer = this.imagecapture.QueryFrame();
               pictureBox1.Image = imageviewer.Bitmap;

               MemoryStream ms = new MemoryStream();
               pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
               byte[] picture = ms.ToArray();
               connection.Open();
               DateTime dtime = DateTime.Now;

               string qry = "INSERT INTO WebcamPhoto (ImageData,DateAndTime)  VALUES(@ImageData,@dt)";

               //Initialize SqlCommand object for insert.
               SqlCommand cmd = new SqlCommand(qry, connection);

               cmd.Parameters.AddWithValue("@ImageData", picture);
               cmd.Parameters.AddWithValue("@dt", dtime);
               cmd.ExecuteNonQuery();
               connection.Close();
               imagecapture.Dispose();

               //Close form and return to list or images.
               this.Close();
           }
           catch (NullReferenceException ex)
           {
               MessageBox.Show(ex.Message);
           }
       }

我试着把回车,错误信息消失了,但即使摄像头在工作,图像也没有保存在数据库中。

private void webcam_Load(object sender, EventArgs e)
       {

           if ((imagecapture == null))
           {
               try
               {
                   imagecapture = new Emgu.CV.VideoCapture();
               }
               catch (Exception ex)
               {
                   MessageBox.Show(ex.Message);
               }
               return;
           }
           Application.Idle += new EventHandler(loadimage);
       }
c# winforms webcam emgucv
1个回答
0
投票

好吧,经过几天的努力,我终于找到了答案。怎么做呢?我试着逐行改变代码的写法,每改一次代码就测试一次,终于找到了罪魁祸首。那么罪魁祸首就是。

public void loadimage(object sender, EventArgs e)
       {
         //my other code.....
               imagecapture.Dispose(); <<<----here 

       }

所以我把它改成

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

现在问题解决了 :)

© www.soinside.com 2019 - 2024. All rights reserved.