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環境では,この関数は機能しない.