Захват с 2 камер (OpenCV, Python) - PullRequest
5 голосов
/ 28 декабря 2011

Итак, я пытаюсь сделать снимок с двух камер в 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, поэтому, если бы кто-то мог отослать меня к этому, я был бы очень благодарен.- Эшли

РЕДАКТИРОВАТЬ: Также может быть полезно знать, что окна часто подсказывают мне, какую камеру я бы хотел использовать.Я не могу избежать этого поведения.Кроме того, я скачал программное обеспечение для обеспечения безопасности, которое успешно запускает обе камеры одновременно.Это не с открытым исходным кодом или что-то в этом роде.Так ясно, это возможно.

Ответы [ 3 ]

4 голосов
/ 03 января 2013

У меня была такая же проблема с двумя веб-камерами студии lifecam. После небольшого прочтения думаю, что проблема связана с перегрузкой полосы пропускания на USB-шине. Обе камеры начали работать, если I 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")
2 голосов
/ 30 декабря 2011

вот небольшой код:

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 - это двумерные массивы, которые вы можете использовать здесь с функциями openCV.

0 голосов
/ 28 декабря 2011

Если вы используете Windows для кодирования, почему бы вам не попробовать модуль VideoCapture. Он очень прост в использовании и выдает изображение PIL. Позже вы можете изменить его на 2D-массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...