HighGUI圖形圖像界面初步—— 圖像的載入、顯示與輸出
HighGUI模塊為高層GUI圖形用戶界面模塊,包含媒體的輸入輸出、視頻捕捉、圖像和視頻的編解碼、圖形交互界面的接口等。
在本章中,我們將學到:
- 圖像的載入、顯示和輸出到文件的詳細分析
- 滑動條的創建和使用
- OpenCV中的鼠標操作
1、圖像的載入與顯示概述
在新版的opencv2中,最簡單的圖像載入和顯示只需兩句代碼,非常便捷。這兩個行代碼分別對應兩個函數:imread()和imwrite()。
1.1 圖像的載入:imread()函數
Mat imread(const string& filename, int flags = 1);
參數說明:
(1)第一各參數:圖片路徑+圖片名。OpenCV的imread函數支持如下類型的圖像載入。
Windows位圖:*.bmp, *.dib
JPEG文件:*.jpeg, *.jpg, *.jpe
JPEG2000文件:*.jp2
PNG圖片:*.png
便攜文件格式:*.pbm, *.pgm, *.ppm
Sun raters光柵文件:*.sr, *.ras
TIFF文件:*.tiff, *,tif
(2)第二個參數:載入標識符。它指定了加載圖像的顏色類型,默認值為1。這個參數可以在OpenCV中表示圖像格式的枚舉體中取值。
CV_LOAD_IMAGE_UNCHANGED —— 等價取值-1,這個標識在新版中已經廢置,忽略。
CV_LOAD_IMAGE_GRAYSCALE —— 等價於取值0,始終將圖像轉換為灰度再返回。
CV_LOAD_IMAGE_COLOR —— 等價取值1,總是講圖像轉換成彩色再返回。
CV_LOAD_IMAGE_ANYDEPTH —— 等價取值2,如果去這個標識,且載入圖像深度為16位或者32位,則返回對應深度圖像,否則轉為8位圖像再返回。
CV_LOAD_IMAGE_ANYCOLOR -—— 等價取值4。
對於參數 flags,如果我們不在枚舉體中取值,那麽可以這樣進行:
flags>0返回三個通道的彩色圖像
flags=0返回灰度圖像
flags<0返回包含Alpha通道的加載圖像
1.2 圖像的顯示:imshow()函數
void imshow(const string & windowname, InputArray mat);
參數說明:
第一個參數:窗口名稱
第二個參數:需要顯示的圖像,Mat類型。
如果窗口使用CV_WINDOW_AUTOSIZE標誌創建,那麽顯示圖像原始大小。
否則按照圖像的深度進行縮放,具體如下:
載入圖像類型 | 顯示大小
8-bit unsigned | 原樣輸出
16-bit unsigned | 使用像素值除以256,也就是值得範圍是[0,255x256]映射到[0,255]
32-bit unsigned | 同上
32-bit float point | 像素要乘以255,也就是範圍[0,1]映射到[0,255]
如果設定了支持OpenGL(WINDOW_OPENGL),那麽imshow還支持ogl::Buffer、ogl::Texture2D以及gpu::GpuMat作為輸入。
2、關於InputArray類型
很多時候,我們遇到函數原型中的InputArray/OutputArray類型,只需要簡單地轉為Mat類型即可。
3、創建窗口:namedWindow()函數
如果只是簡單地顯示圖像,我們可以不用創建窗口,直接在imshow函數中給出窗口名稱即可。
但是我們後續學習到的滑動條的使用,要制定滑動條依附到那個窗口上,這時候就要給出窗口的實例。
namedWindow()函數原型:
void nameWindow(const string & winname, int flags=WINDOW_AUTOSIZE);
參數說明:
第一個參數:窗口名稱
第二個參數:窗口標識符。可以填一下集中取值。
WINDOW_NORMAL,用戶可以改變窗口大小。
WINDOW_AUTOSIZE,窗口大小會自動調整以適應所顯示的圖像,用戶不能手動修改圖像大小。
WINDOW_OPENGL,設置後窗口會支持OpenGL。
以上三個標識符,是在OpenCV1中,如果在OpenCV2中,那麽需要加前綴CV_:
CV_WINDOW_NORMAL
CV_WINDOW_AUTOSIZE
CV_WINDOW_OPENGL
4、輸出圖像到文件:imwrite()函數
bool imwrite(const string& filename, InputAaary img, const vector<int> ¶ms=vector<int>() );
參數說明:
(1)第一個參數,需要寫入的目標文件名,需要帶上後綴。
(2)第二個參數,InputArray類型圖像,一般填一個Mat類型圖像數據。
(3)第三個參數,表示為特定格式保存的參數編碼,默認不用填。如果填的話,下面需要了解的地方。
對於JPEG格式圖片,這個參數表示從0到100的圖片質量(CV_IMWRITE_JPEG_QUALITY),默認值是95.
對於PNG格式圖片,表示壓縮級別(CV_IMWRITE_PNG_COMPRESSION)從0到9,較高的值意味著更小的尺寸和更長的壓縮時間,默認為3.
對於PPM, PGM, 或者PBM格式的圖片,表示一個二進制格式標誌(CV_IMWRITE_PXM_BINARY),取值為0或者1,默認為1.
HighGUI圖形圖像界面初步—— 圖像的載入、顯示與輸出