1. 程式人生 > >OpenCV(一)顯示一幅影象程式碼詳細講解

OpenCV(一)顯示一幅影象程式碼詳細講解

#include "cv.h"
#include "highgui.h"
int main()
{
    IplImage* img = cvLoadImage("G:/test.bmp",-1);
    cvNamedWindow( "test", 0 );
    cvShowImage("test", img);
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "test" );
    return 0;
}
詳細介紹這段程式碼的含義, IplImage* img = cvLoadImage("G:/test.bmp",-1);
將影象檔案載入到記憶體,cvloadImage()函式是一個高層呼叫介面,用過檔名確定被載入檔案的格式。該函式可以讀取絕大多數型別的影象檔案。函式執行完之後返回一個指標,該指標指向一塊為描述改影象檔案的資料結構(IplImage)而分配的記憶體塊。 cvNamedWindow( "test", 0 ); cvNamedWindow()函式也是一個高層呼叫介面,該函式有HighGUI庫提供。該函式用於在螢幕上建立一個視窗,被顯示的影象包含於該視窗中;第一個引數"test"指定了該視窗的視窗標題,其他函式與該視窗進行互動,我們就用該引數值來引用它。第一個引數就是給這個視窗命名。第二個引數定義視窗的屬性,該引數值為0時,視窗的大小不會因為影象的大小而改變,也就是影象要根據視窗的大小來進行伸縮。數值為:CV_WINDOW_AUTOSIZE,顯然視窗會根據影象的大小來改變。
cvShowImage("test", img); 只要有一個與某個影象檔案相對應的Iplmage*型別的指標,我們就可以在一個已建立好的視窗(使用cvNamedWindow()函式建立)中使用cvShowImage ( )函式顯 示該影象。cvShow工mage ( )函式通過設定其第一個引數確定在哪個已存在的視窗中 顯示影象。cvShow工mage ( )函式被呼叫時,該視窗將被重新繪製,並且影象也會顯 示在視窗中。如果該視窗在建立時被指定CV_WINDOW_AUTOSIZE標誌作為 cvNamedWindow()函式的第二個引數,該視窗將根據影象的大小自動調整為與圖 像一致。 cvWaitKey(0);
cvWaitKey ( )函式的功能是使程式暫停,等待使用者觸發一個按鍵操作。但如果將該函式引數設為一個正數,則程式將暫停一段時間,時間長為該整數值個毫秒單位,然後繼續執行程式,即使使用者沒有按下任何鍵。當設定該函式引數為O或負數時,程式將一直等待使用者觸發按鍵操作。 cvReleaseImage( &img ); 一旦用完載入到記憶體的影象檔案,我們就可以釋放為該影象檔案所分配的記憶體。我們通過為cvReleaseImage ( )函式傳遞一個型別為Ip1Image*的指標引數呼叫該函數,用以執行記憶體釋放操作。對cvReleaseImage ( )函式的呼叫執行完畢後,img指標將被設定為NULL。 cvDestroyWindow( "test" ); 最後,可以銷燬顯示影象檔案的視窗。cvDestroyWindow()函式將關閉視窗,並同時釋放為該視窗所分配的所有記憶體(包括視窗內部的影象記憶體緩衝區,該緩衝區中儲存了與img指標相關的影象檔案畫素資訊的一個副本)。因為當應用程序的視窗被關閉時,該應用程式視窗所佔用的一切資源都會由作業系統自動釋放,所以對一些簡單程式,不必呼叫cvDestroyWindow()或cvReleaseImage ( )函式顯式釋放資源。但是,養成習慣每次都呼叫這些函式顯式釋放資源總是有好處的。 WARM Tip將在下一篇文章中詳細講解如何播放一段視訊(攝像頭獲取視訊)。