【发布时间】:2013-11-16 18:29:54
【问题描述】:
我正在尝试同时(或几乎同时)从多个网络摄像头捕获图像。我一直在玩 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 集线器上看到了两个便宜的摄像头(它只打开了一个摄像头。)
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 将是首选包,但是,我正在尝试更好地了解该软件如何与相机交互。
感谢大家的见解!
J
【问题讨论】:
-
最后,你能用多个 IDENTICAL 相机拍摄 snapshopt 吗?
-
很遗憾,我有一段时间没有机会继续从事这个项目了。我计划在月底之前恢复它,当我有一些停机时间时。当我找到一些结果时,我会发布我的结果。 J
标签: python opencv camera video-capture image-capture