2011-10-30 79 views
1

當我運行下面的代碼時,圖像被保存,我可以看到它們,並且它們是我想要的目錄,但顯示它們的調用會顯示20個窗口級聯,其中沒有包含我想要加載的圖像;所有的窗戶都是灰色的。cvLoadImage()+ cvShowImage()來自openCV顯示一個灰色框

for(int i = 1; i <= 20; i++) 
    { 
    img = cvQueryFrame(capture); 
    num = intToString(i); 
    fname = base + num + jpg; 
    winName = base + num; 

    cvSaveImage(fname.c_str(), img); 
    //img = cvLoadImage(fname.c_str(), -1); 
    cvNamedWindow(winName.c_str(), CV_WINDOW_AUTOSIZE); 
    cvMoveWindow(winName.c_str(), 15*i, 15*i);  //cascade windows 
    cvShowImage(winName.c_str(), img); 
    } 

我已經註釋掉的那一行是我在保存後嘗試重新加載圖像的地方,但我仍然得到相同的結果。任何人都知道我的問題是什麼?

+0

IIRC'cvQueryFrame'返回一個指向內部圖像的指針,如果使用'cvCloneImage'並且顯示克隆(克隆的圖像需要稍後釋放),它會起作用嗎? – user786653

+0

cvQueryFrame返回一個IplImage *。我嘗試了你的建議,不,我得到了同樣的結果。看來,cvCloneImage也返回一個IplImage *。另外根據劑量,(http://opencv.willowgarage.com/documentation/basic_structures.html#cvarr,http://www710.univ-lyon1.fr/~bouakaz/OpenCV-0.9.5/docs/ref/ OpenCVRef_Highgui.htm#decl_cvShowImage)cvShowImage()接受IplImage *作爲參數 –

+0

我所指的是[documentation]中的部分(http://www710.univ-lyon1.fr/~bouakaz/OpenCV-0.9。 5/docs/ref/OpenCVRef_Highgui.htm#decl_cvQueryFrame)它表示「抓取的幀存儲在內部」。由於我沒有看到任何代碼立即出錯,我認爲這可能是原因,但我想不是。 – user786653

回答

0

我通過致電cvWaitKey()解決了此問題。從文檔:注意:此函數是HighGUI中唯一可以獲取和處理事件的方法,因此需要定期調用以進行正常事件處理。