opencv while循环,返回第一个循环

时间:2016-04-13 15:36:52

标签: python loops opencv

我有以下python代码(我使用opencv3)。此代码需要完成的是获取通用摄像头的实时流,然后分析静态图片(或帧)。我遇到的问题是,在退出第二个嵌套的while循环之后,我可以弄清楚如何返回到初始循环(#1st loop)。

代码应该:

直播 按' 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

1 个答案:

答案 0 :(得分:0)

你不允许程序逃脱第二个while循环。在第二个循环中使用不同的while条件。而不是while(True)使用布尔值:

#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循环的最佳方式。