opencv waitkey使用注意点

转自http://blog.csdn.net/autocyz/article/details/46941031

楼主在运行一个链接了opencv库的程序时,发现了一个奇怪的现象,就是我的在程序中调用的等待函数waitKey()不起作用,不管是是使用waitKey(100),waitKey(0),waitKey(-1),或者是使用if(waitKey(0) == ‘q’),waitKey总是不起作用。 
举个简单的例子:

int main()
{
    cout<<"I am so cool "<0);
    return 0; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果程序运行的时候会发现控制台窗口一闪而过。 
当时笔者很迷惑,按道理我得随便按一个按键之后,窗口才会消失啊。 
后来笔者想可能是我不小心碰到了,于是就改写了程序:

int main()
{
    cout<<"I am so cool "<if(waitKey(0) == 'q')
        return 0; 
    else 
        return -1;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果还是这样,控制台窗口一闪而过。 
这时笔者就觉得应该是waitKey这个函数有些问题了,于是查阅了opencv的参考手册(PS:真心觉得opencv的官方参考手册很有用,尤其是这个文件opencv2refman.pdf),我搜索到waitKey这个函数,发现这个函数说明的最后,有这么一个note: 
The function only works if there is at least one HighGUI window created and the window is active. If there are several HighGUI windows, any of them can be active. 
此时我才恍然大悟,原来waitKey的使用,必须是在程序中至少有一个HighGUI交互界面,比如,我们最常用的imshow()等这种函数。而我程序中只有一个控制台命令窗口,这个是不属于HighGUI交互界面的,所以此时waitKey是失效的。 
在第二个程序中,因为waitKey(0)根本就没有生效,所以也不会一直等待按键’q’的到来,当然窗口也是会一闪而过。 
但是,如果我的程序中没有HighGUI交互界面,但是我如果只有控制台窗口,而且我也想让他停在当前界面,不会一闪而过,该如何? 
笔者给出两个简单方法:

  1. 在return前加上system(“pause”)。这条语句的意思是让程序暂停执行,直到你按了任意键,才会继续执行后面的程序。
  2. 在程序中给出一个等待输入的语句,比如char response; std::cin>>response这样控制台就会一直等待你的输入

至此,问题成功解决。

你可能感兴趣的:(计算机视觉)