keyboard - 无法使用cvWaitKey()捕获键盘笔触

标签 keyboard opencv ubuntu-10.04 codeblocks

我在这里遇到问题,需要您的帮助。我一直在尝试使用cvWaitKey()函数捕获键盘笔触。
cvWaitKey(10)应该每10ms返回一次键盘击键。
但就我而言,我每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-11536870939-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-111536870939-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对应于没有按键时

感谢帮助。

#include "opencv/cv.h"
#include "opencv/highgui.h"
#include "iostream"

using namespace std;

int main()
{

   IplImage *src=cvCreateImage(cvSize(640,480), 8, 3);
   CvCapture* capture =cvCaptureFromCAM(CV_CAP_ANY);

   int key;
   while(1){

       src = cvRetrieveFrame( capture );

       cvNamedWindow( "out", CV_WINDOW_AUTOSIZE );
       cvShowImage( "out", src );

       key = cvWaitKey(10);
       cout<<key;

       if( key == 1536870939 ) break; //if 'esc' is pressed (in ubuntu 10.04)
       cvGrabFrame( capture );
    }

cvDestroyAllWindows();
cvReleaseCapture( &capture );
return 0;
}

我正在使用:Opencv 2.2.0,Ubuntu 10.04 LTS,CodeBlocks 8.02

最佳答案

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

因此,在您当前的cout << '\n';语句之后放置cout.flush();cout

(顺便说一句:VIDIOC_QUERYMENU:Invalid argument来自v4l(网络摄像头)驱动程序...我不知道1536870939来自何处,ESC应该是27 :))

关于keyboard - 无法使用cvWaitKey()捕获键盘笔触,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205173/

相关文章:

iOS - UIToolBar 作为 UITextView 的 inputAccessoryView

javascript - React Native - 当键盘处于打开状态时 BackHandler 不工作

python - 在python-OpenCV中确定相机和人/脸之间的距离

python - zlib 模块丢失

wpf - WPF 网格中的键盘导航

android - 隐藏和显示软键盘 - 同时

python - 使用numpy和cv2处理大型二进制图像数组

python - OpenCV:如何计算灰度的平均值并将输出保存到 txt 文件

oracle11g - 在 Ubuntu 10.04 中安装 Oracle 11g R2

linux - Perl 输出显示在终端的左侧?