两个摄像头无法在OpenCV中工作

1 投票
2 回答
3998 浏览
提问于 2025-04-18 16:08

我正在使用 Ubuntu 13.10,配合 OpenCV 2.4.9 和 Python 2.7。

我写了以下代码,但在运行时似乎出现了问题。

  import cv2
  c1=cv2.VideoCapture(2) #camera id
  c2=cv2.VideoCapture(1) #camera id
  while(True):
      ret,frame = c1.read()
      ret,frame2 = c2.read()
      frame = cv2.cvtColor(frame,0)
      frame2 = cv2.cvtColor(frame2,0)
      cv2.imshow('frame',frame)
      cv2.imshow('frame2',frame2)
      if cv2.waitKey(1) & 0xFF == ord('q'):
            break

  c1.release()
  c2.release()
  cv2.destroyAllWindows()

但是在 Ubuntu 上运行时,我得到了以下错误:

  VIDIOC_QUERYMENU: Invalid argument
  libv4l2: error turning on stream: Invalid argument
  VIDIOC_STREAMON: Invalid argument
  OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file 
    /build/buildd/opencv-2.4.5+dfsg/modules/imgproc/src/color.cpp, line 3358

  Traceback (most recent call last):
  File "/home/bini/KV/IP_Proj/webcam basics opencv.py", line 8, in <module>
  frame2 = cv2.cvtColor(frame2,0)  
 cv2.error: /build/buildd/opencv-2.4.5+dfsg/modules/imgproc/src/color.cpp:3358: error:       
 (-215) scn == 3 || scn == 4 in function cvtColor

同样的代码在 Windows 上运行得很好。

有人能帮我看看这是为什么吗?我一点头绪都没有。

提前谢谢大家!

2 个回答

1

你的一个(或者两个)摄像头没有正确启动。我刚在我的电脑上(Ubuntu 14.04)运行了你的代码,两个摄像头的画面都能正常显示,看到实时画面。你能在cheese或者guvcview里看到两个摄像头吗?

我确实收到了很多这样的消息:

VIDIOC_QUERYMENU: Invalid argument

错误,但没有收到这些:

libv4l2: error turning on stream: Invalid argument
VIDIOC_STREAMON: Invalid argument
2

在Linux系统中,如果你只用一台摄像头,首先你需要把摄像头的编号改成0。不过,看起来你想同时使用两台摄像头。这是因为你摄像头的分辨率、帧率和使用的协议让USB连接负担过重,所以建议你查看这个链接!下面是一个基本的代码,可以用来连接和使用Linux上的摄像头:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
#set the width and height, and UNSUCCESSFULLY set the exposure time
cap.set(3,1080)
cap.set(4,1024)
cap.set(15, 0.1)

while True:
    ret, img = cap.read()
    cv2.imshow("input",img)
    key = cv2.waitKey(10)
    if key == 27:
        break


cv2.destroyAllWindows() 
cv2.VideoCapture(0).release()

撰写回答