Python中的Webcam DirectShow属性页面

时间:2013-01-19 21:18:35

标签: python webcam directshow

我正在开发一个需要与许多不同USB网络摄像头通信的Windows Python 2.7应用程序。我一直在使用OpenCV,但对于一些科学的网络摄像头,没有检测到默认帧速率,捕获格式等,我只得到一张空白图像。可以打开DirectShow属性页面的外部程序可以在我的程序中解决这个问题,但我想在我的应用程序中使用此功能。

我已经尝试了一个可用的Python库来执行此操作:VideoCapture(http://videocapture.sourceforge.net/)。虽然这会打开属性页,但它不允许更改任何设备设置(“错误连接...此格式当前不可用”,但AMCAP可以正常工作)。我想知道底层代码是否过时了。

在VideoCapture或videoInput(http://www.muonics.net/school/spring05/videoInput/)中使用C ++代码并不是很有用,因为它们都依赖于遍布众多旧的特定DirectX /的旧库WindowsSDK包。不幸的是,我没有足够的知识或时间从头开始或弄清楚VideoCapture有什么问题。

是否有另外一个已经组装好的Python包可以做到这一点?我一直在寻找一段时间,运气不佳。我看了一下libvlc python绑定(因为VLC可以访问属性页面)和DirectPython,但我不清楚这些是否有我正在寻找的东西。

谢谢!

2 个答案:

答案 0 :(得分:0)

由于我最近对此进行了研究,我可以为任何感兴趣的人提供部分回答我自己的问题:

videoInput库包含在OpenCV中的Direct Show实现中。 videoInput库可用于打开视频属性页面(增益,曝光等),但不能用于视频设置页面(具有捕获格式,图像大小,帧速率等),因为没有它的代码。 Cython可用于在Python中与此库进行交互,而不会出现太多问题。

OpenCV的Python绑定可用于访问Direct Show视频属性页面。这需要:

  1. 打开相机设备时使用Direct Show驱动程序,方法是将值CV_CAP_DSHOW添加到索引(无python常量,使用值700)。
  2. 使用CV_CAP_PROP_SETTINGS中的(未记录的)propID VideoCapture::set(int propID, ...)调用窗口进行显示。同样,这个常量不在Python绑定中,所以使用值37(来自highgui_c.h)
  3. (这些说明适用于OpenCV 2.4.6,希望更多的常量会出现在Python绑定中)

答案 1 :(得分:0)

我有一个类似的声音问题。基本上,我偶然通过想要看到我捕获的内容来修复它。

cap = cv2.VideoCapture(0)
print cap.read()      #once to inialize
print cap.read()      #twice to check that it actually initialized

第一个.read()返回(False, None),而第二个实际拥有Feed。在我添加之前,我会将None传递给cv2.imshow('title',frame),我的程序会崩溃。

我不知道这是否能解决你的问题。我是DinoLite USB显微镜,我想我只是通过DirectX访问它。 OpenCV 2.4.8。