OpenCVにおけるwaitKey関数の紹介
1853 ワード
#include <opencv2/opencv.hpp>
#include < iostream >
#include <window.h>
using namespace cv;
using namespace std;
int main()
{
Mat im;
double duration;
im = imread("1.jpg");
// namedWindow waitKey
duration = static_cast<double>(getTickCount());
waitKey(10000);
duration = static_cast<double>(getTickCount())
- duration;
duration /= getTickFrequency();
cout <<" waitKey :" << duration
<< 's' << endl;
namedWindow("Lena");
imshow("Lena",im);
// namedWindow waitKey
duration = static_cast<double>(getTickCount());
waitKey(10000);
duration = static_cast<double>(getTickCount())
- duration;
duration /= getTickFrequency();
cout <<" waitKey :" << duration
<< 's' << endl;
return 0;
}
結果:
最初のwaitKey運転時間は3.56973 e-006 s
2番目のwaitKeyの実行時間は10.054 sです.
任意のキーを押して続行してください.
実行結果から、最初の結果は予定通りに実行されず、2番目の結果は予定通りに実行されたことがわかります.これは、waitKeyがウィンドウメカニズム、すなわちnamedWindowによって生成されたウィンドウにのみ作用するためである.それ以前にウィンドウが生成されなかった場合、waitKeyは未実行に相当します.
waitKeyには2つの役割があります.
1. It waits for x milliseconds for a key press. If a key was pressed during that time, it returns the key's ASCII code. Otherwise, it returns -1.
2It handles any windowing events, such as creating windows with cv::namedWindow(), or showing images with cv::imshow().
書式:
waitKey(x);
1番目のパラメータ:x msを待って、その間にキーが押された場合、すぐに終了し、キーが押された
ASCIIコード、そうでなければ-1を返します
x=0の場合、キーが押されるまで無限に待ち続けます
プログラムがボタンに応答したい場合はif(cvWaitKey(1)=Keyvalue)を使用します.
よくプログラムにif(cvWaitKey(10)>=0)が現れるのは、10 msで任意のキーを押してifブロックに入るということです.
注意:この関数はHighGUIでイベントを取得および操作できる唯一の関数であるため、一般的なイベント処理では、HighGUIがイベントを処理できる環境で使用されない限り、周期的に呼び出される必要がある.例えばMFC環境では,この関数は機能しない.