所以我试图从openCV(python& windows 7)中的两个摄像头捕获。我从一台相机中捕捉得很好,你也会注意到我正在为图像做一些时髦的东西,但这并不重要。这是尝试使用两个
的代码import cv
import time
cv.NamedWindow("camera", 1)
cv.NamedWindow("camera2", 1)
capture = cv.CaptureFromCAM(0)
capture2 = cv.CaptureFromCAM(1)
while True:
img = cv.GetMat(cv.QueryFrame(capture))
img2 = cv.GetMat(cv.QueryFrame(capture2))
dst_image = cv.CloneMat(img)
dst_image2 = cv.CloneMat(img2)
cv.ConvertScale(img, dst_image, 255, -59745.0)
cv.ConvertScale(img2, dst_image2, 255, -59745.0)
cv.ShowImage("camera", dst_image)
cv.ShowImage("camera2", dst_image2)
if cv.WaitKey(10) == 27:
cv.DestroyWindow("camera")
cv.DestroyWindow("camera2")
break
相当简单。但它不会起作用。在尝试从第二个摄像头(循环中的第二行代码)创建矩阵时,我被告知捕获为空。我使用的相机是罗技,是相同的型号。
旁注:我也找不到计算连接在python中的摄像头的命令,所以如果有人可以推荐我,我会非常感激。 --Ashley
编辑: 知道窗户经常提示我选择我想要使用的相机也可能有用。我似乎无法避免这种行为。此外,我下载了一些安全软件,一次成功运行两个摄像头。它不是开源或类似的东西。很明显,这是可能的。
答案 0 :(得分:4)
我遇到了两个lifecam studio网络摄像头同样的问题。经过一番阅读后,我认为这个问题与USB总线上的带宽过载有关。如果我1.)降低分辨率(每个320 x 240)或2.)降低帧速率(~99毫秒@ 800 x 600),两个相机都开始工作。附上了让我工作的代码:
import cv
cv.NamedWindow("Camera 1")
cv.NamedWindow("Camera 2")
video1 = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(video1, cv.CV_CAP_PROP_FRAME_WIDTH, 800)
cv.SetCaptureProperty(video1, cv.CV_CAP_PROP_FRAME_HEIGHT, 600)
video2 = cv.CaptureFromCAM(1)
cv.SetCaptureProperty(video2, cv.CV_CAP_PROP_FRAME_WIDTH, 800)
cv.SetCaptureProperty(video2, cv.CV_CAP_PROP_FRAME_HEIGHT, 600)
loop = True
while(loop == True):
frame1 = cv.QueryFrame(video1)
frame2 = cv.QueryFrame(video2)
cv.ShowImage("Camera 1", frame1)
cv.ShowImage("Camera 2", frame2)
char = cv.WaitKey(99)
if (char == 27):
loop = False
cv.DestroyWindow("Camera 1")
cv.DestroyWindow("Camera 2")
答案 1 :(得分:2)
这是一个小代码:
import VideoCapture
cam0 = VideoCapture.Device(0)
cam1 = VideoCapture.Device(1)
im0 = cam0.getImage()
im1 = cam1.getImage()
im0和im1是PIL图像。您现在可以使用scipy将其转换为数组,如下所示:
import scipy as sp
imarray0 = asarray(im0)
imarray1 = asarray(im1)
imarray0和imarray1是numpy 2D数组,你可以使用openCV函数。
答案 2 :(得分:0)
如果您使用Windows进行编码,为什么不尝试使用VideoCapture模块。它非常易于使用,并提供PIL图像作为输出。您可以稍后将其更改为2D数组。