Реализация таймера для камеры с помощью OpenCV-Python
Большинство из вас, должно быть, хотя бы раз использовали таймер в камере. Это такая функция, которая устанавливает обратный отсчет перед щелчком затвора и созданием фотографии. В этом уроке мы с вами сделаем то же самое, а именно создадим собственный таймер для камеры, используя OpenCV-Python. Итак, давайте начинать!
Основная идея заключается в том, что мы включаем видео и каждый раз, при нажатии на определенную клавишу (здесь я использовал ‘q’), начинается обратный отсчет, создаются фотографии и сохраняются в нужном месте. В противном случае видео будет продолжаться.
Мы будем использовать функцию cv2.putText() для прорисовки обратного отсчета на видеокадре. Эта функция имеет следующие аргументы:
cv2.putText(img, text, position, font, fontScale, color, thickness, lineType, bottomLeftOrigin)
Функция рендерит текст на входном изображении в указанной позиции. Если указанный шрифт не может отобразить какой-либо символ, он заменяется знаком вопроса.
Теперь давайте узнаем, как же реализовать эту функцию:
Шаги:
- Откройте камеру с помощью функции cv2.VideoCapture()
Пока камера не открыта
- Считаем кадр и отобразим его с помощью функции cv2.imshow()
- Установим обратный отсчет таймера по кадрам. Я настроил так, что он будет считать кадры до тридцати, и начиная с десятого, начнет выводить на экран, чтобы это было заметно. Я решил, что лучше начинать с 10 кадра, иначе будет слишком быстро. Вы в свою очередь, можете установить его как угодно и куда угодно.
- Установим ключ для начала обратного отсчета.
- Добавим обработчик на клавишу и по нажатию будем выводить обратный отсчет на экран с помощью функции cv2.putText(). По окончании обратного отсчета сохраним кадр в нужном месте. В противном же случае видео будет продолжено.
- При нажатии ‘Esc’ видео останавливается.
Код:
import cv2 import time # Open the camera cap = cv2.VideoCapture(0) while True: # Read and display each frame ret, img = cap.read() cv2.imshow('a',img) k = cv2.waitKey(125) # Specify the countdown j = 30 # set the key for the countdown to begin if k == ord('q'): while j>=10: ret, img = cap.read() # Display the countdown after 10 frames so that it is easily visible otherwise, # it will be fast. You can set it to anything or remove this condition and put # countdown on each frame if j%10 == 0: # specify the font and draw the countdown using puttext font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,str(j//10),(250,250), font, 7,(255,255,255),10,cv2.LINE_AA) cv2.imshow('a',img) cv2.waitKey(125) j = j-1 else: ret, img = cap.read() # Display the clicked frame for 1 sec. # You can increase time in waitKey also cv2.imshow('a',img) cv2.waitKey(1000) # Save the frame cv2.imwrite('D:/downloads/camera.jpg',img) # Press Esc to exit elif k == 27: break cap.release() cv2.destroyAllWindows()
А теперь посмотрим на результат:
Пробуйте и совершенствуйте свои навыки коддинга!
Перевод статьи: https://theailearner.com/2019/03/18/set-camera-timer-using-opencv-python/