【问题标题】:USB Cam Feed Not Displaying In Picturebox Using C# And Aforge使用 C# 和 Aforge 在 Picturebox 中未显示 USB 摄像头馈送
【发布时间】:2022-04-20 15:42:02
【问题描述】:

我有一个 C# Winforms 项目,我必须在其中从外部网络摄像头 (Logitech HD Pro C920) 捕获图像。我正在使用 Aforge 媒体库。视频输入设备列表显示出来,笔记本电脑的内部网络摄像头正在连接,流正在显示在图片框中。

但是,来自 USB cam 的流没有显示在图片框中,即使它被列为视频输入设备。相关代码如下:

cam = new VideoCaptureDevice(webcam[cbCameras.SelectedIndex].MonikerString);
cam.NewFrame +=new NewFrameEventHandler(cam_NewFrame);
cam.Start();

void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    Bitmap bit = (Bitmap)eventArgs.Frame.Clone();
    picPhoto.Image = bit;
}

我在哪里错过它?谢谢

【问题讨论】:

    标签: c# aforge


    【解决方案1】:

    最后我通过改变我选择网络摄像头的方式找到了解决方案。现在,我选择了 AForge 提供的表单(VideoCaptureDeviceForm)。

    代码如下:

    private void BtnCamSelection_Click(object sender, RoutedEventArgs e)
    {
        VideoCaptureDeviceForm form = new VideoCaptureDeviceForm();
        if(form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.pVideoSource = form.VideoDevice;
    
        }
    
    }
    

    然后,我用变量pVideoSource 加载了aforge:VideoSourcePlayer

    【讨论】:

      【解决方案2】:

      试试这个:

      public VideoCapabilities[] videoCapabilities;
      videoCapabilities = Cam.VideoCapabilities;
      Cam.VideoResolution = videoCapabilities[0];
      

      【讨论】:

      • 能否请您也添加解释?
      【解决方案3】:

      从之前在这里提出的问题 How initialize AForge webcam

      public Form1() // init
      {
          InitializeComponent();
          {
              VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
              foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
              {
                  comboBox1.Items.Add(VideoCaptureDevice.Name);
              }
              comboBox1.SelectedIndex = 0;
          }
      }
      
      private void button1_Click(object sender, EventArgs e)
      {
          FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
          FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
          FinalVideo.Start();
      }
      
      void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
      {
          Bitmap video = (Bitmap)eventArgs.Frame.Clone();
          pictureBox1.Image = video;
      
      }
      
      private void button2_Click(object sender, EventArgs e)
      {
          FinalVideo.Stop();
      }
      }
      

      【讨论】:

      • 捕获部分与我发布的代码有何不同?
      【解决方案4】:

      我也遇到了与此处所示相同的问题。有一个修复程序和一个“解决方法”。

      使用 VideoCaptureDeviceForm 确实有效,如果您想显示此表单,这很好。

      问题

      Logitect C920 似乎没有默认视频分辨率,或者 AForge 没有设置它。其他网络摄像头似乎运行正常。

      修复

      我能够解决 Laurenz Albes 回答的问题。这只会将默认分辨率设置为相机支持的分辨率数组中的第一个,这似乎是最低的。你可以添加逻辑来设置你想要的结果。

      【讨论】:

        猜你喜欢
        • 2014-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多