dyooshi Ответов: 2

Не удается преобразовать группу методов 'queryframe' в не делегированный тип 'image<bgr, byte>' C#


В настоящее время я создаю программное обеспечение windows, которое будет автоматически захватывать с помощью веб-камеры при неправильном использовании входа в систему 3 раза и сохранять захваченную фотографию в папке. Перед этим я попробовал этот код в своем VB.net проект и он прекрасно работает, но теперь я хочу сделать это на C#, но он дает мне эту ошибку.

void loadimage()
       {
           try
           {

               if ((Directory.Exists("C:\\USBlocker") == false))
               {
                   Directory.CreateDirectory("C:\\USBlocker");
               }

             Emgu.CV.Image<Emgu.CV.Structure.Bgr, byte> imageviewer = this.imagecapture.QueryFrame ;  //THE ERROR IS HERE
                pictureBox1.Image = imageviewer.Bitmap;


               string fileName = "C:\\USBlocker\\A.jpg";
               int count = 0;
           Find:
               if (File.Exists(fileName))
               {
                   fileName = (("C:\\USBlocker\\A" + Convert.ToString("("))
                               + (count.ToString() + ").jpg"));
                   count++;
                   goto Find;
               }
               else
               {
                   // Add your logic here
                  imageviewer.Save(fileName);
               }

               imagecapture.Dispose();
               this.Hide();
           }
           catch (NullReferenceException ex)
           {
               MessageBox.Show(ex.Message);
           }
       }

       private void timer1_Tick(object sender, EventArgs e)
       {
           if (timeLeft > 0)
           {
               timeLeft = timeLeft - 1;
           }
           else
           {
               timer1.Stop();

               this.Close();
           }

       }

       private void Webcam_Load(object sender, EventArgs e)
       {
           if ((imagecapture == null))
           {
               try
               {
                   imagecapture = new Emgu.CV.VideoCapture();
               }
               catch (Exception ex)
               {
                   MessageBox.Show(ex.Message);
               }

           }



       }


Что я уже пробовал:

Я пытаюсь добавить () после QueryFrame, потому что обнаружил, что ошибка также может означать, что в ней отсутствует скобка, но она возвращает мне ошибку Невозможно неявно преобразовать тип 'Emgu.CV.Mat' в 'Emgu.CV.Image<emgu.cv.structure.bgr, byte="">'

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вызов imagecapture.QueryFrame не возвращает объект типа 'Emgu.CV.Image<emgu.cv.structure.bgr, byte="">' Вам нужно проверить фактический возвращаемый объект, чтобы увидеть, как преобразовать его в тип, который вы пытаетесь использовать .


Рейтинг:
11

Richard Deeming

Цитата:
Не удается неявно преобразовать тип 'Emgu.CV.Mat' в 'Emgu.CV.Image<Bgr, byte>'
Похоже, вы объявили свою переменную как неправильный тип - вы должны использовать класс Мата[^].
Emgu.CV.Mat imageviewer = this.imagecapture.QueryFrame();
pictureBox1.Image = imageviewer.Bitmap;
Насколько я могу видеть, все члены, которых вы пытаетесь использовать, существуют на Mat класс.


dyooshi

Благодарю вас так много для этого. Ошибка исчезла, но фотография все еще не была сохранена в папке после захвата, но, по крайней мере, теперь ошибка исчезла. Спасибо