2011-12-28 9 views
4

私はopenCV(python & windows 7)の2台のカメラからキャプチャしようとしています。私は1つのカメラからちょうど良いキャプチャ、あなたはまた、私はイメージにいくつかのファンキーなものをやっていることに気づくが、それは問題ではない。これは、2つを使用しようとするコードです。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 

簡潔で簡単です。しかし、それは動作しません。 2番目のカメラ(ループの2番目のコード行)から行列を作成しようとすると、キャプチャがnullであると言われます。私が使用しているカメラはlogitechで、同じモデルです。

サイドノート:私もPythonで接続されたカメラをカウントするコマンドを見つけることができなかったので、誰かが私にそれを感謝すると私に言及することができれば。 --Ashley

EDIT: Windowsでは、使用したいカメラを選択するように指示することがよくあります。私はこの振る舞いを避けることはできません。さらに、私は、成功の両方のカメラを一度に実行するソフトウェアのようなセキュリティをダウンロードしました。それはオープンソースなどではありません。明らかに、これは可能です。

+0

署名が削除されました。よくある質問を参照してください。 –

答えて

0

コーディングにウィンドウを使用している場合は、VideoCaptureモジュールを試してみませんか?非常に使いやすく、出力としてPIL画像を提供します。後で2D配列に変更することができます。ここ

+0

私はopenCVを使うのが好きです。しかし、ありがとう。 – user1118684

+0

今は大丈夫です。 VideoCaptureをセットアップして1台のカメラから画像を保存したが、私はちょっと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はあなたがOpenCVの機能を利用することができfurthere numpyの2Dアレイ、です。

+0

これは私が問題をより簡単に診断するのに役立ちました。それは、2台のカメラが一度にコンピュータに話を聞かせないような、ロジクール用のドライバであることが分かります。それは、最初のカメラをうまく取得します。 2番目のカメラは接続を試みますが、ライトは点滅しますが、成功することはありません。もう一度おねがいします。私は、今のところ2つのカメラを試してみて、別のブランドに行って同じことを2つ実行できるかどうかを確認します。 – user1118684

+0

あなたはトラブルを解決することができたと素晴らしいです。また、コンピュータに接続されているすべてのウェブカメラを列挙する方法を理解しているかどうか教えてください – Vishwanath

3

私は2つのライフキャムスタジオウェブカメラで同じ問題を抱えていました。ちょっと読んだ後、私はその問題がUSBバス上の帯域幅の過負荷に関連していると思います。 1.解像度を下げる(それぞれ320 x 240)または2.)フレームレートを下げる(〜99 msec @ 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") 
関連する問題