繁体   English   中英

从2个摄像机捕获(OpenCV,Python)

[英]Capturing From 2 Cameras (OpenCV, Python)

因此,我试图从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

相当简单。 但是,它将不起作用。 在尝试从第二台摄像机(循环中的第二行代码)创建矩阵时,我被告知捕获为空。 我使用的相机是Logitech,并且型号相同。

旁注:我也找不到计算用python连接的摄像机的命令,所以如果有人可以向我推荐该摄像机,我将不胜感激。 -阿什利

编辑:了解Windows经常提示我选择我想使用的相机可能也很有用。 我似乎无法避免这种行为。 另外,我下载了一些安全性,例如可以一次成功运行两个摄像机的软件。 它不是开源的或类似的东西。 很明显,这是可能的。

两个Lifecam Studio网络摄像头出现相同的问题。 稍作阅读后,我认为该问题与USB总线上的带宽过载有关。 如果我1.)降低了分辨率(每个分辨率为320 x 240)或2.)降低了帧速率(在800 x 600时为〜99毫秒),则两个摄像机都开始工作。 附带的是让我工作的代码:

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")

这是一个小代码:

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二维数组,您可以进一步将它们与openCV函数配合使用。

如果您使用Windows进行编码,为什么不尝试VideoCapture模块。 它非常易于使用,并提供PIL图像作为输出。 您以后可以将其更改为2D阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM