vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数
想用opencv對圖像做一些操作,先實現簡單的讀取和顯示,但是利用下面的代碼,只是顯示了窗口沒有顯示圖像,
Mat image=imread("T1.jpg");
namedWindow("image");
imshow("image",image);
system(“pause”);
return 0;
運行結果是只顯示了如下的窗口,沒有在窗口中顯示圖片,當把鼠標放到窗口上時,一直是等待的狀態,
檢查了opencv的配置,沒有什么問題,設斷點查看,圖像確實讀取成功了,imwrite函數將圖像寫出也是成功的。對比了以前的一個成功的程序,發現兩者之間的差別是之前成功的程序在imshow函數之后有waitkey()函數,而這個程序在imshow函數之后是system函數。琢磨了好一會,又在網上搜了搜,把程序改了一下,成功了….
程序改為:
Mat image=imread("T1.jpg");
namedWindow("image");
imshow("image",image);
waitkey(0);
return 0;
思考了一下:使用vs時候,運行程序時會出現控制臺一閃而過的情況,system(“pause”)的功能是防止控制臺一閃而過,一直以為waitkey函數也是這個功能,所以不能一開始就發現imshow不能顯示圖像的原因?,F在終于知道它的功能不是防止控制臺一閃而過,那么waitkey的功能是什么呢。
在opencv手冊上,對于waitkey函數是這樣介紹的,
C++:int waitkey(int delay=0);
The function waitkey waits for a key event infinitely(when delay≤0)or for delay milliseconds, when it is positive. It returns the code of the pressed key or -1 if no key was pressed before the specified time had elapsed.
大致意思是,waitkey的功能是等待一個按鍵操作,當waitkey函數的參數小于等于0的時候,會一直等待一個鍵盤按鍵操作,然后程序才能繼續運行,當參數大于零時,程序會等待相應的毫秒繼續運行。并且當waitkey的參數小于等于0時,返回的是所按的鍵對應的碼值,當參數大于0時,返回的是-1。
看到這里,或許會覺得waitkey函數的功能就是等待一個按鍵操作,然后程序才會繼續運行??墒?#xff0c;隨意在一段程序中加入waitkey()函數,無論參數是多少,程序都不會停在waitkey函數的位置,不會等待一個按鍵操作,也不會等待相應的毫秒,就像下面的這段程序,
int main(){
cout<
waitkey(10000000);
if(waitkey(0)==’f’){
cout<
return 0;
}
else
{
cout<
return -1
}
}
控制臺仍然是一閃而過,為什么會這樣呢,既沒有等待按鍵操作也沒有稍作停留。Opencv手冊中對waitkey函數的描述下面有這樣一個note:
The function is the only method in HighGUI that can fetch and handle events, so it needs to be called periodically for normal event processing unless HighGUI is used within an environment that takes care of event processing.
這個意思是說,waitkey函數的使用,必須有一個HighGUI交互界面,這就是為什么在一般的程序中waitkey函數不起任何作用。程序中有像imshow()和namewindow()等這種函數,waitkey才會發揮作用,imshow()和namewindow()之后沒有waitkey函數話,圖像不會顯示出來。
總結
以上是生活随笔為你收集整理的vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonweb面试常见问题_pyth
- 下一篇: 默认文献工具_工具分享??超好用的SCI