简体   繁体   中英

Python: Break while loop

I am using a code that takes an input of image files (can be any number in the source folder) and processes them and then saves the files. I am using a while loop to save the files. But the problem I am facing is that once the loop processes all the images and saves them, it starts all over again. How can I break the loop once all the images in the source folder have been processed and saved?

The code I am using is:

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True, help="path to images directory")
args = vars(ap.parse_args())

# initialize the HOG descriptor/person detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# loop over the image paths
imagePaths = list(paths.list_images(args["images"]))

#open images in a sequence
imagePaths.sort()

i =1
while True:
   for imagePath in imagePaths:
       # load the image and resize it to (1) reduce detection time
       # and (2) improve detection accuracy
       image = cv2.imread(imagePath)
       image = imutils.resize(image, width=min(700, image.shape[1]))
       orig = image.copy()

       # detect people in the image
        (rects, weights) = hog.detectMultiScale(image, winStride=(4, 4),
        padding=(8, 8), scale=1.05)

       # draw the original bounding boxes
       for (x, y, w, h) in rects:
             cv2.rectangle(orig, (x, y), (x + w, y + h), (0, 0, 255), 2)

       # apply non-maxima suppression to the bounding boxes using a
       # fairly large overlap threshold to try to maintain overlapping
       # boxes that are still people
       rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
       pick = non_max_suppression(rects, probs=None, overlapThresh=0.65)

       # draw the final bounding boxes
       for (xA, yA, xB, yB) in pick:
              cv2.rectangle(image, (xA, yA), (xB, yB), (0, 255, 0), 2)

       # show some information on the number of bounding boxes
       filename = imagePath[imagePath.rfind("/") + 1:]
       print("[INFO] {}: {} original boxes, {} after suppression".format(
        filename, len(rects), len(pick)))

       cv2.imwrite('%d.png' % (i),image)
       i +=1

for imagePath in imagePaths: already loops over your data and processes everything. There's no reason for it to be nested within another loop. Remove that loop.

...
imagePaths.sort()

i = 1
for imagePath in imagePaths:
    ...
while True:
    for ...:
         // your code
         // your code...
    break  // terminate while loop

Add break at the end of your for loop, it will terminate your current while True loop

In you case, you don't need while True at all. The for loop iterates all your images already.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM