我想使用opencv和python从连接到我的计算机的2个网络摄像头捕获图像。这是我写的代码:
#to take snapshot from two webcams simultaneously
import cv2
import cv2.cv as cv
import numpy as np
left = cv2.VideoCapture(1) #capturing video from device port 1 aka webcam1
right = cv2.VideoCapture(2) #capturing video from device port 2 aka webcam2
capture_left=cv.CaptureFromCAM(1)
capture_right =cv.CaptureFromCAM(2)
while(True):
ret,frameL = left.read()
ret1,frameR = right.read()
rgb_left = cv2.cvtColor(frameL,0)
rgb_right = cv2.cvtColor(frameR,0)
cv2.imshow('frameL',rgb_left)
cv2.imshow('frameR',rgb_right)
k=cv2.waitKey(0)
if k == 27: # wait for ESC key to break
break
elif k == 32: # wait for spacebar to click snapshot
il=cv.QueryFrame(capture_left)
cv.SaveImage("defaultL.jpg",il)
ir=cv.QueryFrame(capture_right)
cv.SaveImage("defaultR.jpg",ir)
left.release()
right.release()
cv2.destroyAllWindows()
但是在执行时这是错误: OpenCV错误:断言失败(scn == 3 || scn == 4)在cv :: cvtColor,文件........ \ opencv \ modules \ imgproc \ src \ color.cpp,第3648行 Traceback(最近一次调用最后一次): 文件“C:\ Users \ Administrator \ Desktop \ capture.py”,第15行,in rgb_right = cv2.cvtColor(frameR,0) cv2.error:........ \ opencv \ modules \ imgproc \ src \ color.cpp:3648:错误:(-215)scn == 3 ||函数cv :: cvtColor中的scn == 4
[退出代码1完成1.5秒]
答案 0 :(得分:0)
添加以下行以检查数据。如果有数据,则处理,否则,继续
if np.shape(frameL) == ():
do nothing and let it pass
else
do the shit you want
if np.shape(frameR) == ():
do nothing and let it pass
else
do the shit you want
还要添加频道检查
if(len(frameL.shape)>2)
rgb_left = cv2.cvtColor(frameL,0)
else
rgb_left = frameL
应该解决所有断言失败的问题
PS。这种方法可能不会同时提供数据。因此,不要期望完美的立体声深度输出。
如果要同时真实拍摄,则需要硬件同步(相机的触发器)。然后是摄像机流的多线程事件句柄。然后绑定数据进行处理。
我使用C ++做过类似的事情。 python不太确定整个过程。
这是从经验来讲。