重磅乾貨,第一時間送達
經過幾個月的努力,小白終於完成了市面上第一本OpenCV 4入門書籍《從零學習OpenCV 4》。為了更讓小夥伴更早的了解最新版的OpenCV 4,小白與出版社溝通,提前在公眾號上連載部分內容,請持續關注小白。
我們在前面已經見過了圖像讀取函數imread()的調用方式,這裡我們給出函數的原型。
代碼清單2-24 imread()函數的原型
cv::Mat cv::imread(const String & filename,
int flags=IMREAD_COLOR
)
函數用於讀取指定的圖像並將其返回給一個Mat類變量,如果圖像文件不存在、破損或者格式不受支持時,則無法讀取圖像,此時函數返回一個空矩陣,因此可以通過判斷返回矩陣的data屬性是否為空或者empty()函數是否為真來判斷是否成功讀取圖像,如果讀取圖像失敗,data屬性返回值為0,empty()函數返回值為1。函數能夠讀取多種格式的圖像文件,但是在不同作業系統由於使用的編解碼器不同,因此在某個系統中能夠讀取的圖像文件可能在其他系統中就無法讀取。無論在哪個系統中,bmp文件和dib文件都是始終可以讀取的,在Windows和Mac系統中,默認情況下使用OpenCV自帶的編解碼器(libjpeg,libpng,libtiff和libjasper),因此可以讀取JPEG(jpg、jpeg、jpe),PNG,TIFF(tiff、tif)文件,在Linux系統中需要自行安裝這些編解碼器,安裝後同樣可以讀取這些類型的文件。不過需要說明的是,該函數能否讀取文件數據與擴展名無關,而是通過文件的內容確定圖像的類型,例如將一個擴展名由png修改成exe時,該函數一樣可以讀取該圖像,但是將擴展名exe改成png,該函數不能加載該文件。
該函數第一個參數以字符串形式給出待讀取圖像的地址,第二個函數是設置讀取圖像的形式,默認的參數是以彩色圖的形式讀取,針對不同需求可以更改參數,在OpenCV 4.1中給出了13種模式讀取圖像的形式,總結起來分別是以原樣式讀取、灰度圖讀取、彩色圖讀取、多位數讀取、在讀取時將圖像縮小一定尺寸等形式讀取,具體可選擇的參數及作用在表2-3種給出,這裡需要指出的是,將彩色圖像轉成灰度圖通過編解碼器內部轉換,可能會與OpenCV程序中將彩色圖像轉成灰度圖的結果存在差異。這些標誌參數在功能不衝突的前提下可以同時聲明多個,不同參數之間用「|」隔開。
表2-3 imread()函數讀取圖像形式參數
標誌參數
簡記
作用
IMREAD_UNCHANGED
-1
按照圖像原樣讀取,保留Alpha通道(第4通道)
IMREAD_GRAYSCALE
0
將圖像轉成單通道灰度圖像後讀取
IMREAD_COLOR
1
將圖像轉換成3通道BGR彩色圖像
IMREAD_ANYDEPTH
2
保留原圖像的16位、32位深度,不聲明該參數則轉成8位讀取
IMREAD_ANYCOLOR
4
以任何可能的顏色讀取圖像
IMREAD_LOAD_GDAL
8
使用gdal驅動程序加載圖像
IMREAD_REDUCED_GRAYSCALE_2
16
將圖像轉成單通道灰度圖像,尺寸縮小1/2,可以更改最後一位數字實現縮小1/4(最後一位改為4)和1/8(最後一位改為8)
IMREAD_REDUCED_COLOR_2
17
將圖像轉成3通道彩色圖像,尺寸縮小1/2,可以更改最後一位數字實現縮小1/4(最後一位改為4)和1/8(最後一位改為8)
IMREAD_IGNORE_ORIENTATION
128
不以EXIF的方向旋轉圖像
注意
默認情況下,讀取圖像的像素數目必須小於2^30,這個要求在絕大多數圖像處理領域都是不受影響的,但是衛星遙感圖像、超高解析度圖像的像素數目可能會超過這個閾值,可以通過修改系統變量中的OPENCV_IO_MAX_IMAGE_PIXELS參數調整能夠讀取的最大像素數目。
經過幾個月的努力,市面上第一本OpenCV 4入門書籍《從零學習OpenCV 4》將於今年12月左右由人民郵電出版社發行。如果小夥伴覺得內容有幫助,希望到時候多多支持!
關注小白的小夥伴可以提前看到書中的內容,我們創建了學習交流群,歡迎各位小夥伴添加小白微信加入交流群,添加小白時請備註「學習OpenCV 4」。