首页 > 解决方案 > EmguCV:使用多个相同相机的问题

问题描述

我正在使用 EmguCV 从不同的网络摄像头获取图像,但我的程序只有在我使用两个相同的摄像头时才会失败。我总共有 4 个摄像头:一个内置在 PC 中的网络摄像头、一个外部网络摄像头和两个相同的 USB 显微镜。

在代码中,我创建了两个视频捕获以从两个不同的来源获取图像并将它们显示在两个图片框中。它适用于每种相机组合,除非我使用两个品牌和型号相同的显微镜。

Dim index0 As Integer = 0 'Select camera to display in picturebox 1
Dim index1 As Integer = 1 'Select camera to display in picturebox 2
Dim cap0 As New VideoCapture(index0)   
Dim cap1 As New VideoCapture(index1)   

Private Sub btnSelect_Click(sender As Object, e As EventArgs) Handles btnSelect.Click
    Timer1.Start()  'Start timer
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'For each tick of the timer display camera capture into imageBox
    Dim frame As Mat = cap0.QueryFrame()
    Dim frame1 As Mat = cap1.QueryFrame()
    pbCam0.Image = frame.Bitmap
    pbCam1.Image = frame1.Bitmap
End Sub

在 index0 和 index1 中我介绍了我要连接的摄像头的索引值:(0)内部网络摄像头,(1)外部网络摄像头,(2)USB显微镜和(3)USB显微镜。当我使用两个显微镜(2-3 或 3-2)的组合时,我分配给 cap1 的任何一个都不会显示图像。cap1.QueryFrame 返回一个空帧。尝试在 pbCam1 中显示图像时收到的错误消息是:

System.NullReferenceException:“对象引用未设置为对象的实例。”

如果有人遇到类似问题或知道发生这种情况的原因,我将不胜感激!

非常感谢

编辑:我发现问题可能是我使用了 USB 集线器(4 个 USB3.0 端口,外接电源 12V/3A)。将一台显微镜连接到集线器,将另一台直接连接到笔记本电脑端口时,它可以工作。

我不知道为什么有些相机可以通过集线器将其中的两个连接起来,但对于其他相机则不然。也许有些相机需要更多功率,而集线器不能同时提供两个?或者可能是驱动程序的问题?

标签: c#vb.netvisual-studiocameraemgucv

解决方案


推荐阅读