2017-01-26 7 views
0

ただ1つのフレームをキャプチャしてtest.pngに保存してから、コードを終了します。 このプログラムでは、exit()が機能しません。毎回ターミナルからCTRL + Cを使用する必要があります。PythonでOpenCVで終了関数が機能しない

import cv2 

#cv2.namedWindow("window") 
cap = cv2.VideoCapture(0) 

if cap.isOpened(): # if we are able to capture the first frame. 
    val, frame = cap.read() 
else: 
    val = False 
while val: 
    #cv2.imshow("window", frame) 
    cv2.imwrite('test.png',frame) 
    val, frame = cap.read() 
    key = cv2.waitKey(20) 
    if key == 27: # exit on ESC 
     break 

cap.release 
cv2.destroyAllWindows() 
exit() 

ありがとうございます。

+0

あなたはブレークに達していますか? – Vanojx1

+0

私はそうは思わない、ESCは動作しません。 @ Vanojx1 –

+0

ifステートメントの前にキー変数にprintステートメントを挿入しようとします。これにより、ブレークに達したかどうかを調べることができます。それからあなたの質問を更新することができます。 – Bouramas

答えて

0

cv::waitKeyは、いずれかのopenCVウィンドウが存在し、おそらくアクティブな場合にのみ機能します。

#cv2.namedWindow("window")#cv2.imshow("window", frame)にコメントしたので、waitKey時間はなく、キーを取得する機会はありません。

namedWindowとimshowを有効にすると機能しますか?

さらにANYキー操作でキャンセルする

if key > 0: # exit on ESC 
    break 

を試してみてください(しかし、あなたがまだアクティブOpenCVのウィンドウを必要とする)を確認するために

この試みる単一のフレームをキャプチャするには:

import cv2 

cap = cv2.VideoCapture(0) 

val = False 
maxTry = 100 # maximum number of tries to capture a frame from an opened device 
cTry = 0 

if cap.isOpened(): # if we are able to capture the first  frame. 
    while (!val) and (cTry < maxTry) 
     val, frame = cap.read() 
     cTry = cTry + 1 
else: 
    val = False 
if val: 
    cv2.imwrite('test.png',frame) 
else: 
    print "No image captured" 

cap.release 
exit() 

を私はPythonのプログラマーではないので、私に何か構文エラーを許してください(そして、それを修正するヒントを教えてください)

+0

これは基本的に私が提案したものであり、明らかにまだ動作しません。 – MateuszB

+0

コメント#を削除すると動作します。しかし、私が質問で言及したように、私はそれが1つのフレームをキャプチャして終了したい。 –

+0

ありがとう@Micka、それは動作します。 –

0

待機キーに&は0xFFを追加してみてください:

key = cv2.waitKey(20) & 0xFF 
ます。また、アクティブなウィンドウ必要

注 がある場合に機能のみ少なくとも一つのHighGUIウィンドウが作成された作品とウィンドウがアクティブです。複数のHighGUIウィンドウがある場合は、それらのウィンドウのいずれかをアクティブにすることができます。

+0

Ctrl + Cを押す必要があります –

+0

他のキーは機能しますか? tryと比較する代わりに、次のようにしてください:ord( 'q') – MateuszB

+0

もう一度テストしてください。 cvw.imshowで画像を表示します。多分、ウィンドウがキーストロークをキャプチャします。 – MateuszB

0

メソッドwaitkey(t)はミリ秒単位で待機するため、コードはループごとにキーが押されるまで20ミリ秒待機します。

ファイルに書き込むまでに時間がかかる場合がありますが、間違ったタイミングで現在のキーを押しているのでしょうか?

0

for python3

cv2.imshow('imafast', frame) 
if cv2.waitKey(25) & 0xFF == ord('q'): 
    break 
関連する問題