Keyboard can';t使用cvWaitKey()捕获键盘笔划

Keyboard can';t使用cvWaitKey()捕获键盘笔划,keyboard,opencv,ubuntu-10.04,codeblocks,Keyboard,Opencv,Ubuntu 10.04,Codeblocks,我这里有个问题,需要你的帮助。我一直在尝试使用cvWaitKey()函数捕捉键盘笔划。 cvWaitKey(10)应每10毫秒返回一次按下的键盘笔划。 但在我的例子中,我每18秒就会得到一次,在这18秒的时间里我按下的所有键。 当我按下“esc”(参见代码)时,通常应该关闭的窗口仍然打开 在控制台中,我得到以下信息: VIDIOC_QUERYMENU:参数无效 VIDIOC_QUERYMENU:参数无效 VIDIOC_QUERYMENU:参数无效 -1-1-1-1-1-1-1-1-1-1-1-1

我这里有个问题,需要你的帮助。我一直在尝试使用cvWaitKey()函数捕捉键盘笔划。 cvWaitKey(10)应每10毫秒返回一次按下的键盘笔划。 但在我的例子中,我每18秒就会得到一次,在这18秒的时间里我按下的所有键。 当我按下“esc”(参见代码)时,通常应该关闭的窗口仍然打开

在控制台中,我得到以下信息:

VIDIOC_QUERYMENU:参数无效
VIDIOC_QUERYMENU:参数无效
VIDIOC_QUERYMENU:参数无效
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1 1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1

与:
1536870939对应于我按下“esc”时的时间
-1对应于未按下任何键的情况

谢谢你的帮助


#包括“opencv/cv.h”
#包括“opencv/highgui.h”
#包括“iostream”
使用名称空间std;
int main()
{
IplImage*src=cvCreateImage(cvSize(640480),8,3);
CvCapture*capture=cvCaptureFromCAM(CV\u CAP\u ANY);
int键;
而(1){
src=cvRetrieveFrame(捕获);
cvNamedWindow(“out”,CV\u WINDOW\u AUTOSIZE);
cvShowImage(“输出”,src);
key=cvWaitKey(10);

cout问题的原因是cout的工作方式:它缓冲字符,并且只有在您发送换行符或明确要求它这样做时才会将字符发送到控制台。(第三种情况:缓冲区已满……但这就是您必须等待18秒的原因。)


问题的原因在于cout的工作方式:它缓冲字符,并且只有在您发送换行符或明确要求它这样做时才将字符发送到控制台。(第三种情况:缓冲区满了……但这就是您必须等待18秒的原因。)


因此,在按下ESC键时,尝试使用0xff掩码返回27:

if( (cvWaitKey(10)&0xff) == 27 ) break;
或者,您可以对角色进行强制转换:

if( (char)cvWaitKey(10) == 27 ) break;

按ESC键时,尝试使用0xff掩码返回27:

if( (cvWaitKey(10)&0xff) == 27 ) break;
或者,您可以对角色进行强制转换:

if( (char)cvWaitKey(10) == 27 ) break;

为什么每次循环迭代都要创建一个新窗口?为什么每次循环迭代都要创建一个新窗口?