2016-04-13 28 views
2

Aşağıdaki python kodum var (ve opencv3 kullanıyorum). Bu kodun başarması gereken, genel bir kameranın canlı akışını almak ve daha sonra statik bir resmi (veya çerçeveyi) analiz etmektir. Sahip olduğum problem, iç içe geçmiş ikinci döngüden çıktıktan sonra, ilk döngüde (# 1 döngü) nasıl geri döneceğimi anlayabilmem.opencv döngüler, ilk döngüye geri dönme

kod olmalıdır:

kare yakalamak ve bu ikinci döngü bir sonraki döngü gitmek için canlı akışı basın 'q' atın: görüntüleri sonra- 's' analyzed- ise o gitmeli 1. döngüye geri dönün. 'esc' ise program sonlandırılmalıdır.

Yineleme yöntemini denedim (def()) ancak programın nasıl sonlandırılacağını anlayamadığım başka bir soruna girdim.

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 

cevap

0

Programın ikinci döngü sırasında kaçmasına izin vermiyorsunuz. İkinci döngüde farklı bir süre kullanın. Bunun yerine (True) bir boolean kullanırken arasında: İkinci döngünün dışında sizi almalısınız

#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 

, sonları güvenerek her zaman while döngüleri işlemek için en iyi yol değildir.