2011-12-28 4 views
4

Итак, я пытаюсь захватить с двух камер в openCV (python & windows 7). Я снимаю с одной камеры просто отлично, вы также заметите, что я делаю некоторые фанки для изображения, но это не имеет значения. Это код для попытки использования двухЗахват из 2-х камер (OpenCV, Python)

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 и являются одной и той же моделью.

Боковое примечание: Я также не мог найти команду для подсчета камер, подключенных к питону, поэтому, если кто-то может сослаться на меня, я бы очень его оценил. --Ashley

EDIT: Возможно, было бы полезно знать, что окна часто подсказывают мне, какую камеру я бы хотел использовать. Я не могу избежать такого поведения. Кроме того, я загрузил некоторую безопасность, такую ​​как программное обеспечение, которое успешно запускает обе камеры одновременно. Это не открытый источник или что-то в этом роде. Так ясно, это возможно.

+0

Подпись удалена, см. Часто задаваемые вопросы. –

ответ

0

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

+0

У меня есть много причин, особенно по дороге, которые мне нужны, я бы предпочел использовать openCV. Но спасибо. – user1118684

+0

Хорошо, теперь отчаяние. Настройте VideoCapture и сохраните изображение с одной камеры, но я немного запутался в том, как делать 2. Любые примеры, на которые вы можете указать мне? – user1118684

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

+0

Так что это помогло мне легче диагностировать проблему. Оказывается, что его драйверы для logitech, которые не позволяют двум камерам одновременно разговаривать с компьютером. Он получает первую камеру в порядке. Вторая камера пытается подключиться, свет мигает, но никогда не удастся. Еще раз спасибо, думаю, сейчас я попробую две разные камеры, а потом посмотрю, смогу ли я пойти с другим брендом и сделать два одинаковых. – user1118684

+0

Удивительно, что вы смогли взломать проблему. Также скажите, если вы выясните, как перечислить все возможные веб-камеры, подключенные к компьютеру – Vishwanath

3

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