簡體   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