Запустить событие с помощью нажатия клавиши? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь заставить мою программу делать 8 снимков только при нажатии клавиши, но я не могу найти решение для нее. Я попробовал пакет с клавиатурой, и всякий раз, когда я нажимал клавишу, возникало сообщение об ошибке. Кстати, вот мой код:

import numpy as np
import cv2
import time
cap = cv2.VideoCapture('morning.mp4')

img_counter = 0
start_time = time.time()
x=0


while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(47) & 0xFF == ord('q'):
        break
    #here is where the image capturing comes into play    
    if time.time() - start_time > 14: #<---- Check if 15 sec passed
        img_name = "frame_{}.png".format(x)
        cv2.imwrite(img_name, frame)
        print("{} written!".format(img_counter))
        start_time = time.time()
        x += 1
    img_counter += 1
    if x == 8:
        break  

cap.release()
cv2.destroyAllWindows()

После комментария "# здесь начинается воспроизведение изображения", пока оператор break не станет местом, где я делаю снимки видео и хочу, чтобы это произошло часть кода с нажатием клавиши. Любая идея, как я должен go об этом?

1 Ответ

0 голосов
/ 13 апреля 2020

Проблема в том, что вы ломаетесь, пока l oop после нажатия клавиши. Вы должны использовать некоторую логическую переменную, чтобы указать, когда скрипт должен захватывать изображения.

Код:

import numpy as np
import cv2
import time
cap = cv2.VideoCapture('morning.mp4')

img_counter = 0
start_time = time.time()
x=0
capture_images = False

while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(47) & 0xFF == ord('q'):
        capture_images = True
    if capture_images:
        #here is where the image capturing comes into play    
        if time.time() - start_time > 14: #<---- Check if 15 sec passed
            img_name = "frame_{}.png".format(x)
            cv2.imwrite(img_name, frame)
            print("{} written!".format(img_counter))
            start_time = time.time()
            x += 1
        img_counter += 1
        if x == 8:
            break  

cap.release()
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...