我正在尝试同时(或几乎同时)从多个网络摄像头捕获图像。我一直在玩OpenCV和VideoCapture以及在 python 中编程。但是有些困惑,希望有人能帮忙解释一下……
首先,我尝试了 VideoCapture(Markus Gritsch 的作品在这里找到:http://videocapture.sourceforge.net/ )。这是一个非常易于使用的python插件。如果我只是想捕捉一个简单的图像。它工作得很好......在大多数情况下。
我的设置是单个 USB 端口上的 USB 集线器中的 2 个便宜的网络摄像头和我笔记本电脑的内置网络摄像头。
我已经阅读了有关在同一 USB 总线上使用同一型号网络摄像头以及它可能无法正常工作等的所有内容,但我决定试一试。(我还有一些我必须在很久以前安装的 photobooth 程序,称为“Cyberlink YouCam”。出于某种原因,这个程序“看起来”像 OpenCV 和 VideoCapture 的相机。
VideoCapture 像这样连接到每个摄像头并从每个摄像头捕获:
Cam0 = Device(devnum=0)
Cam0.saveSnapshot("filename0.jpg")
del Cam0
Cam1 = Device(devnum=1)
Cam1.saveSnapshot("filename1.jpg")
del Cam1
使用 VideoCapture 和我描述的设置,我可以独立地从系统上的所有摄像机(总共 4 个,包括 YouCam... 0 - 3)捕获
问题是该程序似乎无法同时连接到多个摄像头......如果我不关闭前一个摄像头实例,它只会冻结,我必须断开并重新连接第一个网络摄像头从 USB 重新访问它。
这不起作用:
cam0 = Device(devnum=0)
cam1 = Device(devnum=1)
cam0.saveSnapshot("filename0.jpg")
cam1.saveSnapshot("filename1.jpg")
del cam0
del cam1
Cam0 将打开,但这就是它的结束。冷冻。
VideoCapture 的另一件事是,在便宜的网络摄像头上,有一个很大的延迟(几乎一秒钟),直到图片变得活跃......为了成功捕捉,我必须做这样的事情:
Cam1 = Device(devnum=1)
Cam1.saveSnapshot("filename1.jpg") #gets the camera going and saves black image
time.sleep(.75) #delay
Cam1.saveSnapshot("filename1.jpg") #captures the image second time around
有效地保存图像两次...
如果每台相机的图像间隔几毫秒按顺序拍摄,我不会介意
#open connection to cam, take image
#close connection to cam
#connect to next cam, take next image
#close connection to cam
#etc.
但是延迟太多了......我认为延迟是便宜的网络摄像头,但我看到 Open CV 的结果不同,所以它一定是 VideoCapture 的错。
一方面,我可以使用 OpenCV 同时打开多个摄像头……但只能是不同类型的。(其中一个便宜的摄像头和我的内置摄像头......和/或 Cyberlink 程序)OpenCV 似乎在同一个 USB 集线器上看到了 2 个便宜的摄像头(它只打开了其中一个摄像头。)
capture0 = CaptureFromCAM(0) #this was Cyberlink Program
capture1 = CaptureFromCAM(1) #this was cheapo cam
capture2 = CaptureFromCAM(2) #this was built-in cam
#CaptureFromCAM(3) resulted in error... did not find a 4th "camera"
frame0 = QueryFrame(capure0)
frame1 = QueryFrame(capure1)
frame2 = QueryFrame(capure2)
cv.SaveImage("filename0.jpg",frame0)
cv.SaveImage("filename1.jpg",frame1)
cv.SaveImage("filename2.jpg",frame2)
VideoCapture 可以独立地看到 2 个相似的摄像头,而 OpenCV 则不能。
有谁知道为什么会这样?这两个软件包与计算机的交互有何不同,一个可以确定同一 USB 上的不同凸轮,而另一个不能?
其次,OpenCV 立即打开了我的廉价摄像头……没有 0.75 秒的延迟。
同样,我很好奇这两个包(videoCapture 与 OpenCV)与摄像机的通信有何不同?
我最终感兴趣的是能够同时从 2 或 3 个摄像机捕获(或接近它,如果有几毫秒的延迟,那很好)。看起来 OpenCV 将是首选包,但是,我试图更好地了解该软件如何与相机交互。
谢谢大家的洞察力!
Ĵ