2016-04-13 19 views
2

私は次のpythonコードを持っています(そして私はopencv3を使用しています)。このコードが必要とするのは、一般的なカメラのライブストリームを取得し、静的な画像(またはフレーム)を分析することです。私が持っている問題は、2番目のネストされたwhileループを終了した後、最初のループ(#1ループ)に戻る方法を知ることができるということです。opencv whileループ、最初のループに戻る

コードはすべき:それは行くべきanalyzed-画像-afterさん 'の場合 :

は、フレームをキャプチャし、この第二のループに次のループ に行くために プレス「Q」ライブストリームを取ります最初のループに戻ります。 'esc'ならプログラムを終了させるべきです。

私は再帰メソッド(def())を試しましたが、プログラムを終了する方法がわからない別の問題が発生しました。

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 
#Set LED brightness for camera 
cap.set(cv2.CAP_PROP_BRIGHTNESS, 120) 

#1st loop 
while (True): 

    #capture camera stream 
    ret, frame = cap.read() 
    cv2.imshow('live image', frame) 
if cv2.waitKey(0) == ord('q'): 

    cap.release() 
    cv2.destroyAllWindows() 
    pass 
    print ('image alteration block') 



    #2nd loop 
    while (True): 
     img = frame 
     cv2.imshow('image',img) 
     k = cv2.waitKey(0) 
     if k == 27:   # wait for ESC key to exit and terminate progra, 
      cv2.destroyAllWindows() 
      break 

     elif k == ord('s'): # wait for 's' key to save the image and go back to the live stream 
      cv2.imwrite('messigray.png',img) 
      print ('go back to the beginning') 
      cv2.destroyAllWindows() 
     continue #NOT SURE WHAT TO DO HERE 

答えて

0

プログラムは2回目のwhileループからエスケープすることはできません。 2番目のループでは、別のwhile条件を使用します。代わりに、しばらく(真)のブール値を使用します。休憩に頼って、第二のループの外にあなたを取得する必要があります

#2nd loop 
    second=True 
    while (second): 
     img = frame 
     cv2.imshow('image',img) 
     k = cv2.waitKey(0) 
     if k == 27:   # wait for ESC key to exit and terminate progra, 
      cv2.destroyAllWindows() 
      break 

     elif k == ord('s'): 
      cv2.imwrite('messigray.png',img) 
      print ('go back to the beginning') 
      cv2.destroyAllWindows() 
      #modify the loop condition 
      second = False 
     continue 

は常にwhileループを処理するための最良の方法ではありません。

関連する問題