Opencv的imread用法

全部參考來自網上僅僅作學習記錄用,具體正確性須要在具體項目各自驗證,不涉及具體錯誤代碼處理調試等問題,歡迎發現發現問題~html

參考:python

1. https://blog.csdn.net/LiheZhu/article/details/50485317ios

2. https://mangoroom.cn/opencv/opencv-learning-imread.htmlc++

 

1.該函數位於Highgui.h和Loadsave.cpp文件中。 web

Mat imread( const string& filename, int flags )          {               Mat img;               imread_( filename, flags, LOAD_MAT, &img );               return img;          } 接下來看一下imread_函數中關於flags的部分swift

int type = decoder->type(); if( flags != -1 ) { if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 ) type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type)); if( (flags & CV_LOAD_IMAGE_COLOR) != 0 || ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) ) type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3); else type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1); } 

其中,CV_LOAD_IMAGE_XXX定義位於Highgui_c.h文件中函數

enum // 枚舉 (enum) { /* 8bit, color or not */ CV_LOAD_IMAGE_UNCHANGED =-1, /* 8bit, gray */ CV_LOAD_IMAGE_GRAYSCALE =0, /* ?, color */ CV_LOAD_IMAGE_COLOR =1, /* any depth, ? */ CV_LOAD_IMAGE_ANYDEPTH =2, /* ?, any color */ CV_LOAD_IMAGE_ANYCOLOR =4 };

由此,咱們能夠得出以下結論:學習

flags = -1:imread按解碼獲得的方式讀入圖像   //  =    CV_LOAD_IMAGE_UNCHANGED ui

flags = 0:imread按單通道的方式讀入圖像,即灰白圖像   //  =   CV_LOAD_IMAGE_GRAYSCALEspa

flags = 1:imread按三通道方式讀入圖像,即彩色圖像   //  =   CV_LOAD_IMAGE_COLOR

 

 

 

2       

 

 

 

想要完整全面地學習opencv,僅憑閱讀samples的示例源碼是不夠的。畢竟opencv是一個擁有很是多函數的程序庫,因此在每學習一個函數時,芒果以爲有必要記錄下來,分享給有須要的同窗。因而,就有了這一篇的開始,之後的這個就歸爲opencv函數學習的系列了,篇幅應該都會比較短。

 

imread函數

 

imread函數做用

 

imread函數的做用很是簡單,從函數的名稱也能夠看出來,imread爲image read的縮寫,即圖像讀取的意思,。那麼imread函數的做用就很明顯了,負責讀取圖像。其實學過matlab的同窗就會知道,matlab中也有一個讀取圖像的函數也命名爲imread,這是opencv借鑑了matlab而命名的,由於在opencv1.x時代,加載圖像的函數並不叫imread,二是由cvLoadImage函數負責。

 

imread函數原型

 

話很少說,先了解imread函數的原型,從opencv的最新document能夠查閱到imread原型爲

 

imread c++原型

 

#include <opencv2/imgcodecs.hpp> Mat cv::imread ( const String & filename, int flags = IMREAD_COLOR ) 

 

imread python原型

 

Python:
retval    =    cv.imread(    filename[, flags]    )

 

能夠看到,imread函數原型很是簡單,能夠總結爲三點

 

  • 返回值,Mat 類型, 即返回讀取的圖像,讀取圖像失敗時返回一個空的矩陣對象(Mat::data == NULL)
  • 參數1 filename, 讀取的圖片文件名,可使用相對路徑或者絕對路徑,但必須帶完整的文件擴展名(圖片格式後綴)
  • 參數2 flags, 一個讀取標記,用於選擇讀取圖片的方式,默認值爲IMREAD_COLOR,flag值的設定與用什麼顏色格式讀取圖片有關

 

參數1 補充:

 

imread函數支持讀取的圖像格式有

 

  • Windows bitmaps - .bmp, .dib (always supported)
  • JPEG files - .jpeg, .jpg, *.jpe (see the Note section)
  • JPEG 2000 files - *.jp2 (see the Note section)
  • Portable Network Graphics - *.png (see the Note section)
  • WebP - *.webp (see the Note section)
  • Portable image format - .pbm, .pgm, .ppm .pxm, *.pnm (always supported)
  • PFM files - *.pfm (see the Note section)
  • Sun rasters - .sr, .ras (always supported)
  • TIFF files - .tiff, .tif (see the Note section)
  • OpenEXR Image files - *.exr (see the Note section)
  • Radiance HDR - .hdr, .pic (always supported)
  • Raster and Vector geospatial data supported by GDAL (see the Note section) Note

 

參數2 補充:

 

這些flags值被定義在enum cv::ImreadModes枚舉類裏面

 

c++定義 python定義 說明
-1 IMREAD_UNCHANGED Python: cv.IMREAD_UNCHANGED 若是設置,則按原樣返回加載的圖像(使用Alpha通道,不然會被裁剪)
0 IMREAD_GRAYSCALE Python: cv.IMREAD_GRAYSCALE 若是設置,則始終將圖像轉換爲單通道灰度圖像(編解碼器內部轉換)。
1 IMREAD_COLOR Python: cv.IMREAD_COLOR 若是設置,請始終將圖像轉換爲3通道BGR彩色圖像。
2 IMREAD_ANYDEPTH Python: cv.IMREAD_ANYDEPTH 若是設置,則在輸入具備相應深度時返回16位/ 32位圖像,不然將其轉換爲8位。
IMREAD_ANYCOLOR Python: cv.IMREAD_ANYCOLOR 若是設置,則以任何可能的顏色格式讀取圖像。
 IMREAD_LOAD_GDAL Python: cv.IMREAD_LOAD_GDAL 若是設置,使用gdal驅動程序加載圖像
IMREAD_REDUCED_GRAYSCALE_2 Python: cv.IMREAD_REDUCED_GRAYSCALE_2 若是設置,則始終將圖像轉換爲單通道灰度圖像,圖像尺寸減少1/2。
IMREAD_REDUCED_COLOR_2 Python: cv.IMREAD_REDUCED_COLOR_2 若是設置,則始終將圖像轉換爲3通道BGR彩色圖像,圖像尺寸減少1/2。
IMREAD_REDUCED_GRAYSCALE_4 Python: cv.IMREAD_REDUCED_GRAYSCALE_4 若是設置,則始終將圖像轉換爲單通道灰度圖像,圖像尺寸減少1/4
IMREAD_REDUCED_COLOR_4 Python: cv.IMREAD_REDUCED_COLOR_4 若是設置,則始終將圖像轉換爲3通道BGR彩色圖像,圖像尺寸減少1/4
IMREAD_REDUCED_GRAYSCALE_8 Python: cv.IMREAD_REDUCED_GRAYSCALE_8 若是設置,則始終將圖像轉換爲單通道灰度圖像,圖像尺寸減少1/8。
IMREAD_REDUCED_COLOR_8 Python: cv.IMREAD_REDUCED_COLOR_8 若是設置,則始終將圖像轉換爲3通道BGR彩色圖像,圖像尺寸減少1/8。
IMREAD_IGNORE_ORIENTATION Python: cv.IMREAD_IGNORE_ORIENTATION 若是設置,請不要根據EXIF的方向標誌旋轉圖像。

 

 

 

 

#include<iostream>

#include<opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

    //read the image

    Mat image = imread("./clock.jpg");

    if (image.data != NULL)

    {

        //show the image

        imshow("clock", image);

        waitKey(0);

    }

    else

    {

        cout << "can&apos;t openc the file!" << endl;

        getchar();

    }

    return 0;

}

尾巴

opencv的官方文檔document實際上是一份很是好的資料,關於opencv的幾乎均可以在上面查閱獲得,不過缺點就是文檔爲全英文的,這個須要本身克服一下。


本文由芒果浩明發布,轉載需註明來源。 本文連接:https://mangoroom.cn/opencv/opencv-learning-imread.html

相關文章
相關標籤/搜索