OpenCV調整顯示視訊的格式及位置
阿新 • • 發佈:2019-02-15
參考: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()函式來關閉視窗,並取消之前分配的與視窗相關的所有記憶體空間。
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座標。