Создание таймлапс-изображений в python

Следующий код захватывает изображение с веб-камеры и сохраняет его на диск. Я хочу написать программу, которая может автоматизировать захват изображения каждые 30 секунд до 12 часов. Как лучше всего это сделать?

import cv2     
cap = cv2.VideoCapture(0)
image0 = cap.read()[1]
cv2.imwrite('image0.png', image0)

Ниже приводится модификация, основанная на ответе @John Zwinck, поскольку мне также нужно записывать изображение, захватываемое каждые 30 секунд, в имя диска с захваченным временем:

import time, cv2
current_time = time.time()
endtime = current_time + 12*60*60
cap = cv2.VideoCapture(0)
while current_time < endtime:    
    img = cap.read()[1]
    cv2.imwrite('img_{}.png'.format(current_time), img)
    time.sleep(30)

Однако приведенный выше код мог каждый раз записывать только последний файл поверх предыдущего. Ищем его улучшение.


person Community    schedule 01.03.2014    source источник


Ответы (2)


Имя вашего выходного изображения такое же!!! В цикле while current_time не изменится, поэтому каждый кадр будет сохраняться с одним и тем же именем. Замена .format(current_time) на .format(time.time()) должна работать.

Заменять

while current_time < endtime:
img = cap.read()[1] cv2.imwrite('img_{}.png'.format(current_time), img) time.sleep(30)

To cv2.imwrite('img_{}.png'.format(int(time.time())), img)

person LSW    schedule 14.06.2016

person    schedule
comment
Мне также нужно записать изображение, снятое каждые 30 секунд, с указанием времени захвата. - person ; 01.03.2014
comment
Отлично, попробуйте реализовать это. Это не услуга по бесплатному коду. Если вы застряли, обязательно вернитесь с новым вопросом. - person John Zwinck; 01.03.2014
comment
Я вижу, вы уже поняли, как указать время в имени файла. Так ты теперь в порядке? - person John Zwinck; 01.03.2014