歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenCV中waitkey(0)不起作用

本人在運行一個鏈接了OpenCV庫的程序時,發現了一個奇怪的現象,就是我的在程序中調用的等待函數waitKey()不起作用,不管是是使用waitKey(100),waitKey(0),waitKey(-1),或者是使用if(waitKey(0) == ‘q’),waitKey總是不起作用。
舉個簡單的例子:

int main()
{
    cout<<"I am so cool "<<endl;
    waitKey(0);
    return 0; 
}

結果程序運行的時候會發現控制台窗口一閃而過。
當時筆者很迷惑,按道理我得隨便按一個按鍵之後,窗口才會消失啊。
後來筆者想可能是我不小心碰到了,於是就改寫了程序:

int main()
{
    cout<<"I am so cool "<<endl;
    if(waitKey(0) == 'q')
        return 0; 
    else 
        return -1;
}

結果還是這樣,控制台窗口一閃而過。
這時筆者就覺得應該是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這樣控制台就會一直等待你的輸入

至此,問題成功解決。

OpenCV官方教程中文版(For Python) PDF  http://www.linuxidc.com/Linux/2015-08/121400.htm

Ubuntu 14.04安裝OpenCV2.4.9  http://www.linuxidc.com/Linux/2016-07/132884.htm

Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 16.04上用CMake圖形界面交叉編譯樹莓派的OpenCV3.0 http://www.linuxidc.com/Linux/2016-10/135914.htm

Ubuntu 16.04中安裝OpenCV 2.4.11  http://www.linuxidc.com/Linux/2016-07/132882.htm

Ubuntu 16.04下Matlab2014a+Anaconda2+OpenCV3.1+Caffe安裝  http://www.linuxidc.com/Linux/2016-07/132860.htm

[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9  http://www.linuxidc.com/Linux/2014-12/110045.htm

Ubuntu 安裝 OpenCV 2.4.9  http://www.linuxidc.com/Linux/2016-12/138293.htm

OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved