我正在尝试同时(或几乎同时)从多个网络摄像头捕捉图像。我一直在玩OpenCV、VideoCapture和python编程。但有些困惑,希望有人能帮忙解释。。。
首先,我尝试了视频捕捉(Markus Gritsch的工作在这里找到:http://videocapture.sourceforge.net/)。
这是一个非常易于使用的python插件。如果我只是想捕捉一个简单的图像。它工作得很好。。。在很大程度上。
我的设置是两个便宜的摄像头在一个USB接口上的USB集线器和我的笔记本电脑的内置摄像头。
我读过所有关于在同一个USB总线上使用同一型号的摄像头,以及它可能无法工作的内容,等等,但我决定尝试一下。(我也有一些照片亭的程序,我一定已经安装了很久以前称为“Cyberlink YouCam”出于某种原因,这个程序“看起来”像是一个摄像头,对OpenCV和视频捕捉。
视频捕获连接到每个摄像头并从中捕获,如下所示:Cam0 = Device(devnum=0)
Cam0.saveSnapshot("filename0.jpg")
del Cam0
Cam1 = Device(devnum=1)
Cam1.saveSnapshot("filename1.jpg")
del Cam1
有了视频捕捉和我描述的设置,我可以独立地从我的系统上的所有相机(共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将打开,但这是它的结束。冻僵了。
另一件事是,在cheapo摄像头上,有一个很大的延迟(几乎一秒钟)直到图片变得生动。。。为了成功抓捕,我不得不这样做: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.
但是耽搁太久了。。。我以为是因为网络摄像头太便宜了,但我看到了另一个结果,因为简历是公开的,所以一定是视频捕获的错。
首先,我可以用OpenCV同时打开多个相机。。。但只有不同类型的。(其中一个cheapo摄像头和我的内置摄像头。。。和/或Cyberlink程序)OpenCV似乎看到两个cheapo摄像头和一个摄像头在同一个USB集线器上(它只打开其中一个摄像头)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)
然而,视频捕捉可以看到两个类似的相机独立,OpenCV不能。
有人知道为什么吗?两个软件包与计算机的交互方式有什么不同,一个可以在同一个USB上确定不同的摄像头,另一个不能?
其次,OpenCV立刻打开了我的廉价相机。。。不,在那里耽搁了75秒。
同样,我很好奇这两个软件包(视频捕捉和OpenCV)与摄像头之间的通信方式有什么不同?
我最终感兴趣的是能够同时从2或3个摄像机上拍摄(或者接近它,如果有几毫秒的延迟,那就可以了)。看起来OpenCV是一个不错的选择,但是,我试图更好地理解软件是如何与摄像头交互的。
谢谢大家的洞察力!
J型