1. 程式人生 > >OpenCV調整顯示視訊的格式及位置

OpenCV調整顯示視訊的格式及位置

參考:http://www.bubuko.com/infodetail-506338.html

參考:http://blog.csdn.net/expection1985/article/details/6709041

利用OpenCV讀取多個相機後,預設顯示多個視窗,會重疊在一起,因此需要設定後每個視窗顯示的大小及位置,這樣可以省去手動拖動的麻煩

首先看看視訊讀取及儲存的相關函式

1、namedWindow函式

namedWindow函式用來建立一個視窗,函式原型如下:

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE ); 
引數解釋:第一個引數,const string&型的name,即填被用作視窗的識別符號的視窗名稱。第二個引數,int 型別的flags ,視窗的標識,可以填如下的值:
WINDOW_NORMAL
設定了這個值,使用者便可以改變視窗的大小(沒有限制)
WINDOW_AUTOSIZE如果設定了這個值,視窗大小會自動調整以適應所顯示的影象,並且不能手動改變視窗大小。
WINDOW_OPENGL 如果設定了這個值的話,視窗建立的時候便會支援OpenGL。

首先需要注意的是,它有預設值WINDOW_AUTOSIZE,所以,一般情況下,這個函式我們填第一個變數就行了。
namedWindow函式的作用是,通過指定的名字,建立一個可以作為影象和進度條的容器視窗。如果具有相同名稱的視窗已經存在,則函式不做任何事情。我們可以呼叫destroyWindow()或者destroyAllWindows()函式來關閉視窗,並取消之前分配的與視窗相關的所有記憶體空間。
但話是這樣說,其實對於程式碼量不大的簡單小程式來說,我們完全沒有必要手動呼叫上述的destroyWindow()或者destroyAllWindows()函式,因為在退出時,所有的資源和應用程式的視窗會被作業系統會自動關閉。

2、imshow函式

在指定的視窗中顯示一幅影象,函式原型為:

void imshow(const string& winname, InputArray mat);
引數解釋:第一個引數,const string&型別的winname,填需要顯示的視窗標識名稱。第二個引數,InputArray 型別的mat,填需要顯示的影象。

imshow 函式用於在指定的視窗中顯示影象。如果視窗是用CV_WINDOW_AUTOSIZE(預設值)標誌建立的,那麼顯示影象原始大小。否則,將影象進行縮放以適合視窗。而imshow 函式縮放影象,取決於影象的深度:
如果載入的影象是8位無符號型別(8-bit unsigned),就顯示影象本來的樣子。
如果影象是16位無符號型別(16-bit unsigned)或32位整型(32-bit integer),便用畫素值除以256。也就是說,值的範圍是[0,255 x 256]對映到[0,255]。
如果影象是32位浮點型(32-bit floating-point),畫素值便要乘以255。也就是說,該值的範圍是[0,1]對映到[0,255]。


3、imwrite函式

在OpenCV中,輸出影象到檔案,我們一般都用imwrite函式,函式原型如下:

bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() );  
引數解釋:第一個引數,const string&型別的filename,填需要寫入的檔名就行了,帶上字尾,比如,“123.jpg”這樣。第二個引數,InputArray型別的img,一般填一個Mat型別的影象資料就行了。第三個引數,const vector<int>&型別的params,表示為特定格式儲存的引數編碼,它有預設值vector<int>(),所以一般情況下不需要填寫。

在用namedwindow建立視窗顯示視訊後,可以通過cvMoveWindow函式來設定視窗的位置

4、cvMoveWindow函式

函式cvMoveWindow用來改變視窗的位置,函式原型如下:

void cvMoveWindow( const char* name, int x, int y );
引數解釋:第一個引數name為將被設定的視窗的名字。第二個引數x為視窗左上角的x座標。第三個引數y為視窗左上角的y座標。