1. 程式人生 > >HighGUI圖形圖像界面初步—— 圖像的載入、顯示與輸出

HighGUI圖形圖像界面初步—— 圖像的載入、顯示與輸出

params 圖像 opengl div idt 灰度 orm 三個參數 size

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> &params=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圖形圖像界面初步—— 圖像的載入、顯示與輸出