Що відбувається під час виконання cvWaitKey()
? Які типові випадки використання? Я бачив це у посиланні на OpenCV, але документація не чітко визначає його точну мету.
cvWaitKey()
тепер застаріла функція C. waitKey()
є сучасним еквівалентом C ++.
Що відбувається під час виконання cvWaitKey()
? Які типові випадки використання? Я бачив це у посиланні на OpenCV, але документація не чітко визначає його точну мету.
cvWaitKey()
тепер застаріла функція C. waitKey()
є сучасним еквівалентом C ++.
Відповіді:
cvWaitKey(x) / cv::waitKey(x)
робить дві речі:
cv::imshow()
). Зверніть увагу, що він не слухає stdin для введення консолі. Якщо протягом цього часу була натиснута клавіша, вона повертає код ASCII ключа. В іншому випадку він повертається -1
. (Якщо x дорівнює нулю, це очікування натискання клавіші нескінченно довго).cv::namedWindow()
або показ зображень за допомогою cv::imshow()
.Типовою помилкою для новачків opencv є виклик cv::imshow()
циклу через відеокадри, не слідкуючи за кожним розіграшем cv::waitKey(30)
. У цьому випадку на екрані нічого не відображається, оскільки у highgui ніколи не дається часу на обробку запитів на розіграш cv::imshow()
.
Простий просто, cvWaitKey()
спить протягом X мілісекунд, чекаючи натискання будь-якої клавіші.
int cvWaitKey(int X);
Якщо натиснути клавішу, ця функція повертає ASCII-код ключа. Або повертає -1, якщо протягом цього часу не було натиснуто жодної клавіші.
cvWaitKey(0)
зупиняє програму, доки ви не натиснете кнопку.
cvWaitKey(10)
не зупиняє вашу програму, але прокидається та попереджає про закінчення програми, коли ви натискаєте кнопку. Він використовується у циклах, тому cvWaitkey
що не зупиняється.
Звичайне використання
char k;
k=cvWaitKey(0);
if(k == 'ESC')
з k
ви можете побачити , що клавіша була натиснута.
. аргумент Росії 0
трактується якinfinite
. для того, щоб перетягувати вікна highGUI, вам потрібно постійно викликати cv::waitKey()
функцію. наприклад, для статичних зображень:
cv::imshow("winname", img);
while(cv::waitKey(1) != 27); // 27 = ascii value of ESC
Примітка для тих, хто мав проблеми з cvWaitKey( )
функцією. Якщо ви виявили, що cvWaitKey(x)
зовсім не чекаєте, переконайтесь, що у вас насправді відкрито вікно (тобто cvNamedWindow(...)
). Помістіть cvNamedWindow(...)
декларацію ПЕРЕД будь-якими cvWaitKey()
викликами функцій.
/* Assuming this is a while loop -> e.g. video stream where img is obtained from say web camera.*/
cvShowImage("Window",img);
/* A small interval of 10 milliseconds. This may be necessary to display the image correctly */
cvWaitKey(10);
/* to wait until user feeds keyboard input replace with cvWaitKey(0); */
cvWaitKey
Просто дає що - то затримки. Наприклад:
char c = cvWaitKey(33);
if( c == 27 ) break;
Це було окремо від мого коду, в якому відео завантажувалось у openCV і виводились кадри. 33
Номер в засобі коду, після того 33ms
, новий кадр буде показаний. Отже, делі або часовий інтервал 33ms
між кожним кадром відображався на екрані. Сподіваюся, це допомагає.
cvWaitKey(milliseconds)
просто почекайте мілісекунд, наданих як параметр для наступного натискання клавіші клавіатури.
Людські очі не бачать, як річ рухається менше ніж за 1/10 секунди, тому ми використовуємо це, щоб деякий час утримувати на екрані один і той же кадр зображення. Як тільки буде натиснута клавіша клавіатури, буде виконана наступна операція.
Коротше cvWaitKey(milliseconds)
зачекайте натискання клавіші або millisecond
часу.
чекає мілісекунд, щоб перевірити, чи натиснута клавіша, якщо натиснути в цьому інтервалі, повернути її значення ascii, інакше вона все ще -1