所有參考來自網上僅僅做學習記錄用,具體正確性需要在具體項目各自驗證,不涉及具體錯誤代碼處理調試等問題,歡迎發現發現問題~
參考:
1. https://blog.csdn.net/LiheZhu/article/details/50485317
2. https://mangoroom.cn/opencv/opencv-learning-imread.html
1.該函數位於Highgui.h和Loadsave.cpp文件中。
Mat imread( const string& filename, int flags ) { Mat img; imread_( filename, flags, LOAD_MAT, &img ); return img; } 接下來看一下imread_函數中關於flags的部分
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
flags = 0:imread按單通道的方式讀入圖像,即灰白圖像 // = CV_LOAD_IMAGE_GRAYSCALE
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位。 |
4 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的方向標志旋轉圖像。 |
尾巴
opencv的官方文檔document其實是一份非常好的資料,關於opencv的幾乎都可以在上面查閱得到,不過缺點就是文檔為全英文的,這個需要自己克服一下。
本文由芒果浩明發布,轉載需注明來源。 本文鏈接:https://mangoroom.cn/opencv/opencv-learning-imread.html