日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数

發(fā)布時(shí)間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

想用opencv對(duì)圖像做一些操作,先實(shí)現(xiàn)簡(jiǎn)單的讀取和顯示,但是利用下面的代碼,只是顯示了窗口沒(méi)有顯示圖像,

Mat image=imread("T1.jpg");

namedWindow("image");

imshow("image",image);

system(“pause”);

return 0;

運(yùn)行結(jié)果是只顯示了如下的窗口,沒(méi)有在窗口中顯示圖片,當(dāng)把鼠標(biāo)放到窗口上時(shí),一直是等待的狀態(tài),

檢查了opencv的配置,沒(méi)有什么問(wèn)題,設(shè)斷點(diǎn)查看,圖像確實(shí)讀取成功了,imwrite函數(shù)將圖像寫出也是成功的。對(duì)比了以前的一個(gè)成功的程序,發(fā)現(xiàn)兩者之間的差別是之前成功的程序在imshow函數(shù)之后有waitkey()函數(shù),而這個(gè)程序在imshow函數(shù)之后是system函數(shù)。琢磨了好一會(huì),又在網(wǎng)上搜了搜,把程序改了一下,成功了….

程序改為:

Mat image=imread("T1.jpg");

namedWindow("image");

imshow("image",image);

waitkey(0);

return 0;

思考了一下:使用vs時(shí)候,運(yùn)行程序時(shí)會(huì)出現(xiàn)控制臺(tái)一閃而過(guò)的情況,system(“pause”)的功能是防止控制臺(tái)一閃而過(guò),一直以為waitkey函數(shù)也是這個(gè)功能,所以不能一開始就發(fā)現(xiàn)imshow不能顯示圖像的原因。現(xiàn)在終于知道它的功能不是防止控制臺(tái)一閃而過(guò),那么waitkey的功能是什么呢。

在opencv手冊(cè)上,對(duì)于waitkey函數(shù)是這樣介紹的,

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的功能是等待一個(gè)按鍵操作,當(dāng)waitkey函數(shù)的參數(shù)小于等于0的時(shí)候,會(huì)一直等待一個(gè)鍵盤按鍵操作,然后程序才能繼續(xù)運(yùn)行,當(dāng)參數(shù)大于零時(shí),程序會(huì)等待相應(yīng)的毫秒繼續(xù)運(yùn)行。并且當(dāng)waitkey的參數(shù)小于等于0時(shí),返回的是所按的鍵對(duì)應(yīng)的碼值,當(dāng)參數(shù)大于0時(shí),返回的是-1。

看到這里,或許會(huì)覺(jué)得waitkey函數(shù)的功能就是等待一個(gè)按鍵操作,然后程序才會(huì)繼續(xù)運(yùn)行。可是,隨意在一段程序中加入waitkey()函數(shù),無(wú)論參數(shù)是多少,程序都不會(huì)停在waitkey函數(shù)的位置,不會(huì)等待一個(gè)按鍵操作,也不會(huì)等待相應(yīng)的毫秒,就像下面的這段程序,

int main(){

cout<

waitkey(10000000);

if(waitkey(0)==’f’){

cout<

return 0;

}

else

{

cout<

return -1

}

}

控制臺(tái)仍然是一閃而過(guò),為什么會(huì)這樣呢,既沒(méi)有等待按鍵操作也沒(méi)有稍作停留。Opencv手冊(cè)中對(duì)waitkey函數(shù)的描述下面有這樣一個(gè)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.

這個(gè)意思是說(shuō),waitkey函數(shù)的使用,必須有一個(gè)HighGUI交互界面,這就是為什么在一般的程序中waitkey函數(shù)不起任何作用。程序中有像imshow()和namewindow()等這種函數(shù),waitkey才會(huì)發(fā)揮作用,imshow()和namewindow()之后沒(méi)有waitkey函數(shù)話,圖像不會(huì)顯示出來(lái)。

總結(jié)

以上是生活随笔為你收集整理的vs中imshow函数报错_opencv编程:8 imshow不显示图像和waitkey函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。