2012-06-20 121 views
0

我的系统是Linux HPDebian 3.2.0-2-amd64#1 SMP x86_64 GNU/Linux Python 2.7,OpenCV2 我只能使用1个凸轮。 我的问题是如何从2个摄像头获取视频? 我读过C++版本,但我更喜欢python。非程序员更容易。Python OpenCV立体摄像头盲?

我不明白为什么我的摄像头只能WLEFT,但赖特是空白的灰色窗口 并在命令行

VIDIOC_QBUF:无效的参数

继续涌入我的命令行。

OpenCV-Python有一个现成的立体声程序包,但我需要访问每个凸轮的元素,因为我想测试我的算法。

网址,书。任何帮助,将不胜感激。 学生

我尝试:

''' 
Simple Stereo feed 
''' 
import cv 
cv.NamedWindow("wLeft", cv.CV_WINDOW_AUTOSIZE) 
cv.NamedWindow("wRight", cv.CV_WINDOW_AUTOSIZE) 
captureL = cv.CaptureFromCAM(0) 
captureR = cv.CaptureFromCAM(1) 

def repeat(): 
    frameL = cv.QueryFrame(captureL) 
    cv.ShowImage("wLeft", frameL) 
    frameR = cv.QueryFrame(captureR) 
    cv.ShowImage("wRight", frameR) 

while True: 
    repeat() 
    if cv.WaitKey(33)==27: 
     break 

cv.DestroyAllWindows() 

================================== =============
更新1
回答您的问题

  1. 在当前的OpenCV的Python。我无法找到任何命令,但是当我将Leftcam注释掉时,Rightcam仍然有效。反之亦然。
  2. 是的,我刚刚发现它!我重定向命令并仔细搜索。
    libv4l2:错误打开流:没有剩余空间设备
  3. 他们是相同的。 OKER193。
  4. 我只能用它1只凸轮左或右。无法同时从两个视频中获取视频。
  5. 我没有集线器。我不知道它是否是真正的端口,但我将它连接到我的笔记本的左侧和右侧。
    http://opencv-users.1802565.n2.nabble.com/Multiple-Camera-Read-Error-td7001563.html

我试过cv.ReleaseCapture()

def repeat(): 
     frameL = cv.QueryFrame(captureL) 
     cv.ShowImage("wLeft", frameL) 
     cv.ReleaseCapture(captureL) 
     frameR = cv.QueryFrame(captureR) 
     cv.ShowImage("wRight", frameR) 
     cv.ReleaseCapture(captureR) 

我得到的错误:

... 
VIDIOC_QUERYMENU: Invalid argument //Many lines 
... 
Traceback (most recent call last): 
    File "55.py", line 19, in <module> 
    repeat() 
    File "55.py", line 13, in repeat 
    cv.ReleaseCapture(captureL) 
AttributeError: 'module' object has no attribute 'ReleaseCapture' 

我真的不知道
http://opencv.willowgarage.com/documentation/python/highgui_reading_and_writing_images_and_video.html?highlight=releasecapture
CaptureFromCAM最后一行说要释放结构,使用ReleaseCapture。此功能 可能会退出。

转悠,发现这个
https://superuser.com/questions/431759/using-multiple-usb-webcams-in-linux

然后我检查凸轮的按我的分辨率为640x480作为一个正常的。 而我的摄像头是1.1/2.0的USB接口。

[email protected]:~# v4l2-ctl -d /dev/video0 --list-formats 
ioctl: VIDIOC_ENUM_FMT 
    Index  : 0 
    Type  : Video Capture 
    Pixel Format: 'YUYV' 
    Name  : YUV 4:2:2 (YUYV) 

然后检查另一凸轮

[email protected]:~# v4l2-ctl -d /dev/video1 --list-formats 
ioctl: VIDIOC_ENUM_FMT 
    Index  : 0 
    Type  : Video Capture 
    Pixel Format: 'YUYV' 
    Name  : YUV 4:2:2 (YUYV) 

在这一点上我不知道我的USB笔记本电脑。它可能是里面的枢纽。我会尝试降低分辨率并再次发布我的结果。

============================================== ==========================
更新2
尝试从马丁time.sleep(1)。

VIDIOC_QUERYMENU: Invalid argument //Many lines 
libv4l2: error setting pixformat: Device or resource busy 
HIGHGUI ERROR: libv4l unable to ioctl S_FMT 
libv4l2: error setting pixformat: Device or resource busy 
libv4l1: error setting pixformat: Device or resource busy 
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT 

libv4l2: error turning on stream: No space left on device 
VIDIOC_STREAMON: No space left on device 
VIDIOC_QBUF: Invalid argument //Many lines until Ctrl C 

我会在M $ xp再试一次。

============================================== =

更新3

仍然使用Linux。 M $ xp很忙。这次我删除了c1和c2。因为我不知道如何释放相机。我相信我使用的驱动程序的API每次只允许1个设备访问内核。所以我试试这个。

def repeat1(): 
    c1 = cv.CreateCameraCapture(0) 
    i1 = cv.QueryFrame(c1) 
    cv.ShowImage("WebCAM1", i1) 
    del(c1) 
def repeat2(): 
    c2 = cv.CreateCameraCapture(1) 
    i2 = cv.QueryFrame(c2) 
    cv.ShowImage("WebCAM2", i2)  
    del(c2) 


程序运行非常缓慢,并WebCAM1被扭曲,WebCAM2不是。

+0

好像你不是唯一一个遇到此:http://permalink.gmane.org/gmane.comp.lib.opencv.user/263 –

+0

[OpenCV with 2 cameras VC++]可能出现的重复(http://stackoverflow.com/questions/10194033/opencv-with-2-cameras-vc) –

+1

您是否尝试过“import cv2”和“CaputureL = video.create_capture( 0)“?另外,您应该在与“CaputureL.release()”的休息时间释放相机,因为这可能会导致调试时出现问题。 – Snesticle

回答

0

有些事情要检查:

  1. 是OpenCV的拿起您的所有的相机?尝试checking how many cameras are attached
  2. 你是否收到其他错误信息?也就是说你有提到的那个堆栈跟踪?
  3. 两台摄像机之间是否有硬件差异?
  4. 如果你注释掉所有关于lcam的东西,会发生什么?也就是说,它只是与第二台相机有关,还是与一次运行两台相机有关。
  5. 试戴插入到单独的枢纽按this suggestion
+0

两次摄像机设置之间的Sleep()有时是必要的 - 至少在Windows上可怜的USB摄像头驱动程序 –

+0

@Jon我更新了答案,但仍然无法解决此问题。 – Sarit

+0

@Martin Sleep()函数。好的,我会尝试你的建议。 – Sarit