2015-06-03 10 views
1

Боюсь, что я столкнулся с чем-то, что немного выходит за рамки моих способностей новичков. Краткое резюме проблемы: Я пытаюсь захватить живой видеопоток во время эксперимента (используя OpenSesame) с веб-камеры, используя модуль OpenCV python. Я могу заставить его работать, но моя проблема заключается в том, что код всплывает, открывая новое окно, чтобы показать живой поток, который он записывает. Как мне изменить этот код, чтобы НЕ показывать живое окно, но все же можно нажать «q», чтобы отключить прямой эфир?Захват веб-камеры OpenCV

import numpy as np 
import cv2 

subject = str(self.get('subject_nr')) 
cap = cv2.VideoCapture(0) 
w=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 
h=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 

#Define the codec and create VideoWriter object 
#fourcc = cv2.VideoWriter_fourcc(*'DIVX') 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('path\to\output'+ subject + '.avi', -1, 20.0, (w,h)) 

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

     out.write(frame) 

     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

#Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 
+0

Вы можете попробовать комментирования 'cv2.imshow ('кадр', кадр)' и 'попробовать если ((cv.waitKey (1) & 0xFF == Ord ('д')) сломаться;' –

+0

Ah , спасибо за ваш ответ! Мы приближаемся! Код запускается и записывается, но я все еще не могу использовать нажатие клавиши, чтобы освободить задание. – DrPineapple

+0

Можете ли вы попробовать нажатие клавиши с активной консолью? –

ответ

0

cv2.waitKey() захватывает нажатия клавиш из окна highgui. Вы не можете использовать waitKey для захвата нажатий клавиш, если вы никогда не открываете окно. Вам понадобится что-то, что может захватывать нажатия клавиш с терминала.

Для linux вы можете достичь этого, используя модулии fcntl. Вот пример из документации Python. https://docs.python.org/2/faq/library.html#how-do-i-get-a-single-keypress-at-a-time

+0

Спасибо за головы! Так что я сделал интернет-поиск и смог получить скрипт, работающий с 'msvcrt.kbhit()' (я нахожусь в Windows), но теперь проблема заключается в том, что он не сохраняет поток веб-камеры в указанном месте. Я чувствую, что я так близко, или просто слеп к ревущей ошибке здесь. ll, я сделал, был вставляем 'if msvcrt.kbhit(): if (msvcrt.getch() ==" q "): break' ниже' out.write (frame) ' – DrPineapple

+0

@DrPineapple Я не уверен, но, возможно, вам нужен waitKey для видеовращателя. Попробуйте переместить этот оператор ниже оператора waitKey. Еще раз, это всего лишь предположение. –

Смежные вопросы