gpt4 book ai didi

Python OpenCV 立体摄像头盲一?

转载 作者:行者123 更新时间:2023-12-02 16:42:40 25 4
gpt4 key购买 nike

我的系统是 Linux HPDebian 3.2.0-2-amd64 #1 SMP x86_64 GNU/Linux Python 2.7,OpenCV2。我只能使用 1 个凸轮。
我的问题是如何从 2 个摄像头获取视频源?我读过 C++ 版本,但我更喜欢 python。对于非程序员来说更容易。
我不明白为什么我的网络摄像头只能使用 Wleft,但 WRight 是空白的灰色窗口。在命令行

VIDIOC_QBUF: Invalid argument


继续淹没我的命令行。
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
回答您的问题:
  • 在当前的 OpenCV-Python 中。我找不到任何命令,但是当我注释掉 Leftcam 时,Rightcam 可以工作。反之亦然。
  • 是的,我刚找到它!我重定向命令并仔细搜索。

    libv4l2: error turning on stream: No space left on device


  • 它们是相同的。 OKER193。
  • 我只能使用它只有 1 个凸轮左或右。无法同时从其中两个获取视频源。
  • 我没有集线器。我不知道它是不是一个真正的端口,但我将它连接到我的笔记本的左右两侧。
    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接口(interface)。
    root@HPDebian:~# 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)
    然后检查另一个凸轮
    root@HPDebian:~# 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
    试试 Martin 的 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 没有。

    最佳答案

    需要检查的一些事项:

  • OpenCV 是否会拿起你所有的相机?试试 checking how many cameras are attached .
  • 您是否收到任何错误其他错误消息?即您提到的堆栈轨道是否存在?
  • 两款相机之间有硬件差异吗?
  • 如果你注释掉所有关于 lcam 的东西会发生什么?即它只是与第二台相机有关,还是与同时运行两个相机有关。
  • 尝试按照 this suggestion 将它们插入单独的集线器
  • 关于Python OpenCV 立体摄像头盲一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119200/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com