2016-09-21 11 views
0

に私は私のウェブカメラからの深度マップを表示するスクリプトを書いた:OpenCVのウェブカメラスクリプトが無限ウェブカメラをオフにし、

cam_a = int(sys.argv[1]) 
cam_b = int(sys.argv[2]) 


while True: 
    imgl = cv2.VideoCapture(cam_a).read()[1] 
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY) 

    imgr = cv2.VideoCapture(cam_b).read()[1] 
    imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY) 


    stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15) 
    disparity = stereo.compute(imgL,imgR) 

    cv2.imshow('Disparity', disparity) 

そして、それは私にエラーを与えるものではありませんが、それは私のウェブカメラの両方を点滅しませんオフとオン、無限に。私はこれが私のウェブカメラを壊すかもしれないことを心配しています、どうすればこれを止めることができますか?

EDIT

だから、それだけで通常のビデオのような1つのカメラを示しているので、私はそれを変更:

while True: 
    imgl = cv2.VideoCapture(cam_a).read()[1] 
    imgL = cv2.cvtColor(imgl, cv2.COLOR_BGR2GRAY) 

    #imgr = cv2.VideoCapture(cam_b).read()[1] 
    #imgR = cv2.cvtColor(imgr, cv2.COLOR_BGR2GRAY) 


    #stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15) 
    #disparity = stereo.compute(imgL,imgR) 

    cv2.imshow('Disparity', imgL) 
    cv2.waitKey(10) 

そして、それはまだだけオンとオフカメラが点滅します。私はここで何を変えるべきか分からない。

答えて

2

は問題を得ました。 whileループの下でビデオキャプチャオブジェクトを継続的に開始しています。あなたはループキャプチャ中に開始された1つのインスタンスを使用し、そのビデオキャプチャのインスタンスを使用してイメージにアクセスする必要があります。この例を参照し、コードを適宜変更して問題を解決してください。

import cv2 
camera = cv2.VideoCapture(0) 
while True: 
    return_value,image = camera.read() 
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) 
    cv2.imshow('image',gray) 
    if cv2.waitKey(1)& 0xFF == ord('s'): 
     cv2.imwrite('test.jpg',image) 
     break 
camera.release() 
cv2.destroyAllWindows() 
0

あなたはimshow後に遅延を追加する必要があるすべて:

cv2.waitKey(10) 
+0

これはうまくいかなかった。今は画像が表示されますが、私のウェブカム(logitech)は両方ともオン、オフ、オン、オフなどの状態です。 – Rich

+0

1つのカムだけを使用し、1つのカムだけを変更するとどうなりますか? –

+0

ねえ、私は新しいセクションを追加しました。 – Rich

関連する問題