2016-01-25 2 views
0

Существует программа, которая передает прямой эфир с камеры: я хочу выполнить некоторые операции, когда нажата клавиша с клавиатуры, не нарушая продолжающийся процесс. Я попробовалДисплей, когда клавиша нажата в opencv

if(waitKey(30) == '27') 
    cout << "ESC pressed"; 

Но этот не работает.

+0

У вас есть это в цикле? –

+0

Что вы подразумеваете под словом «не беспокоящий процесс»? Вы хотите/попытаться поймать keyPress в отдельном потоке? – Micka

+0

Я хочу поймать нажатие клавиши только в той же теме. И да, это в петле –

ответ

3

Documentation:
Функция работает только если есть по крайней мере одно окно HighGUI создано и активно окно. Если есть несколько окон HighGUI, любой из них может быть активным.

Как я понимаю из вашего вопроса, кажется, что у вас нет активных окон. Если это так, сначала покажите изображение с помощью функции imshow, а затем дождитесь нажатия любой клавиши.

+0

Я думаю, вам также может потребоваться щелкнуть в показанном окне. – GPPK

2

cv::waitKey() возвращает целое число. Вы можете преобразовать его в char, а затем сравнить с десятичного ASCII код любого ключа, как этот

if((char)cv::waitKey(1) == 27) std::cout << "ESC pressed" << std::endl; 

или (что то же самое) написать

if(cv::waitKey(1) % 256 == 27) std::cout << "ESC pressed" << std::endl;