2网络摄像头源无法使用opencv

时间:2014-08-05 20:08:54

标签: python opencv webcam

我使用ubuntu 13.10以及带有python 2.7的opencv 2.4.9。 我编写了以下代码,但似乎在运行时失败。

  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 个答案:

答案 0 :(得分:2)

对于linux,如果您使用的是1台摄像机,首先必须将摄像机ID更改为0,但似乎您需要使用2台摄像机,这是因为使用了分辨率,帧速率和协议通过您的相机重载USB连接,请阅读this链接!这也是连接和使用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()

答案 1 :(得分:1)

您的一个(或两个)相机未正确初始化。我刚刚在我的机器上运行你的代码(Ubuntu 14.04),两个帧都出现了我的两个连接摄像头的实时视图。您可以在cheeseguvcview中查看这两个相机吗?

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

VIDIOC_QUERYMENU: Invalid argument

错误,但这些都没有:

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