2016-06-23 10 views
0

カメラからビデオをキャプチャしたいコードがあります。私は、PythonのLoggingライブラリを使って、シェルでメッセージを取得したり、テキストファイルにエクスポートしたりしたいと考えています。ここでPython:ループ内で1回だけ印刷する

私はカメラを印刷する内部のwhileループが正常に

import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 

while True: 

    ret, image = cap.read() 

    if ret == True: 
     log.warning('Camera Opened Successfully') 

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8)) 
    gray1 = clahe.apply(gray) 

を開設しかし私は貝に入ることはこれです私のコードの一部です:

私は実行中のスクリプトを終了するまで。どのようにそれを一度だけ印刷させるかについてのアイデア。あなたは、印刷後にループから抜け出すにしたい場合は

import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 

while True: 

    ret, image = cap.read() 

    if ret == True: 
     log.warning('Camera Opened Successfully') 
     break 
+0

Um、 'if'文を使用します。 – ppperry

+0

サイドノート: 'if ret == True:'を使用しないでください。 'if ret:'を使うだけです。それはPythonic(より簡潔で、かつそれほど速くない)よりです。あなたが本当に 'True'を本当にテストする必要があるなら、他の真理値ではなく、' ret = True: 'と違って' retがTrue: 'としたいでしょう。' ret'を処理しません。 「1」、「1.0」などの値を「True」に等しくする。しかし、めったにそれがほしいとは思っていません。もし 'if ret:'をチェックしてください。 'ret == False'と同じです。あなたはほとんどいつも 'not ret'を望んでいます。 – ShadowRanger

答えて

3
import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 
hasOpened = False 

while True: 

    ret, image = cap.read() 

    if ret and not hasOpened: 
     log.warning('Camera Opened Successfully') 
     hasOpened = True 

ループから抜け出す必要があります

+0

ありがとうたくさんの男:)。私は許可されたあなたの答えを受け入れるだろう。 – Tes3awy

0

は、マットの答えに従ってください。このオプションはループ内で継続され、一度だけ印刷されます。

+0

私は、コードの残りの部分を壊す場合も同様に壊れます – Tes3awy

+0

それはちょうどwhileループを終了し、その後に続行します。実行したいwhileループに他のステートメントがありますか? –

+0

はい、多くの声明です。しかし、その大丈夫、答えが掲載され、それはあなたのケアのために私のためにうまく動作します:)。 – Tes3awy

1

あなたが前にそれをプリントアウトしているかどうかを追跡するために余分なブール値を追加します。

import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 
printed = False 

while True: 

    ret, image = cap.read() 

    if ret == True and not printed: 
     log.warning('Camera Opened Successfully') 
     printed = True 
-1

は、あなたのアプリケーションロジックを処理するために、あなたのメインループを使用したいと仮定すると、それが一つのループを持っている意味がありません。それが開かれているかどうかを検出するためのものと、それを処理するための別のものについては、状態が変わったかどうかを判断する変数を設定することが望ましいと思います。

あなたはできるだけ早くあなたが使用することができます ret真を得るように、ループから抜け出すしたいと思いもするので、whileループを分割する必要があり
import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 
old_ret = False 

while True: 

    ret, image = cap.read() 

    if old_ret == False and ret == True: 
     old_red = True 
     log.warning('Camera Opened Successfully') 

    if ret == True: 
     # Do other things that need the camera but no log 
+0

old_retをTrueに設定するのを忘れてしまった –

0

トリガするためのフラグを設定し
ret = False 
while not ret: 

    ret, image = cap.read() 

    if ret: 
     log.warning('Camera Opened Successfully') 
    # any other code 
0

ログを作成し、それを偽にします。ループを終了して終了する準備ができたら、retをFalseにして

import numpy as np 
import cv2 
import logging as log 

cap = cv2.VideoCapture('5.mpg') 
ret = True 
logit = True 
while ret: 

    ret, image = cap.read() 

    if logit == True: 
     log.warning('Camera Opened Successfully') 
     logit = False 

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8)) 
    gray1 = clahe.apply(gray) 
    // process remainder of situation setting 
関連する問題