【從零學習OpenCV 4】圖像讀取函數imread

2021-02-20 小白學視覺

重磅乾貨,第一時間送達

經過幾個月的努力,小白終於完成了市面上第一本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」。

相關焦點

  • 【從零學習OpenCV】 視頻數據的讀取&攝像頭的直接調用
    重磅乾貨,第一時間送達經過幾個月的努力,小白終於完成了市面上第一本OpenCV 4入門書籍《從零學習OpenCV 4
  • OpenCV圖像讀取(imread) 顯示(imshow) 保存(imwrite)的冷知識點
    OpenCV圖像讀取(imread) 顯示(imshow) 保存(imwrite)的冷知識點,雖然很基礎,但也有用。
  • 【從零學習OpenCV 4】分割圖像——Mean-Shift分割算法
    碼清單8-25 myPyrMeanShiftFiltering.cpp利用均值漂移法分割圖像#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(){ Mat img =
  • Python+OpenCV的基礎圖像處理操作匯總
    它可以用來調整圖像的大小,以適應我們的網頁所需大小,並可以使他們銳化它可以將黑白圖像轉換成彩色照片,或者可以使用著色技術使彩色照片看起來像舊的黑白照片一樣它可以用來增強醫學影像來檢查病人的癌症或其他疾病。在本文中,我們將看到從目錄中讀取圖像、修改圖像並將其存儲在另一個目錄中的函數實現。下面是我們要討論的主要內容。
  • 【走進OpenCV】學習Opencv不得不掌握的操作
    圖像初始化操作#include<opencv2\opencv.hpp>   #include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;int main(int argc, char** argv){
  • 給OpenCV初學者的禮物——OpenCV人臉檢測入門教程
    很榮幸能成為大家學習OpenCV的領路人。作者祝大家都能在學習的過程中找人生到真正的意義。本文的參考文檔見https://docs.opencv.org/4.0.1/d1/dfb/intro.html圖像的基本操作對於人類來說,圖像可以解構為畫面結構、色彩和非常豐富的意象。
  • opencv學習記錄1——視頻讀取與寫入
    為了敦促自己的學習計劃和進度,本期作為opencv的學習專項計劃記錄,希望這些記錄能夠為以後的學習提供一些記憶和練習資料,同時,恩公偶為需要的童鞋提供微不足道的幫助和學習計劃
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • 【OpenCV入門之十三】如何在ROI中添加Logo
    在圖像處理領域,有一個非常重要的名詞ROI。它的英文全稱是Region Of Interest,對應的中文解釋就是感興趣區域。感興趣區域,就是我們從圖像中選擇一個圖像區域,這個區域就是圖像分析所關注的焦點。我們圈定這個區域,那麼我們要處理的圖像就從大圖像變為一個小圖像區域了,這樣以便進行進一步處理,可以大大減小處理時間。
  • 基於OpenCV的圖像分割處理!
    這樣的劃分可以通過從灰度級出發選取一個或多個閾值來實現。學習目標算法理論介紹閾值處理threshold函數OpenCV使用threshold函數實現閾值化處理。adaptiveThreshold函數OpenCV提供了adaptiveThreshold函數實現自適應閾值處理。
  • 【從零學習OpenCV】保存和讀取XML和YMAL文件
    重磅乾貨,第一時間送達經過幾個月的努力,小白終於完成了市面上第一本OpenCV 4入門書籍《從零學習OpenCV 4
  • 基於opencv的感興趣區域ROI的操作
    利用opencv庫進行編程實現對感興趣區域ROI的操作例如:將小圖標複製到大圖像的指定位置中使用到的函數:矩形的表示:Rect類----》Rect(x,y,width,heigh)對Rect類的解釋:Rect類的成員變量有x、y、width、height,分別在左上角點的坐標和矩形的寬和高。
  • Python 圖像處理 OpenCV (1):入門
    /官方 Demo :https://github.com/opencv/opencv/blob/master/samples/python圖書推薦圖書的話我就推薦一本吧,如果要看書學習絕對不能錯過的「Learning OpenCV 3」,當然,是英文原版的,中文版的話翻譯有點慘不忍睹,對英文閱讀壓力大的同學可以中英文對照著看:
  • 【Python3+OpenCV】實現圖像處理—基本操作篇
    讀入圖像Opencv中使用函數cv2.imread(filepath,flags)讀入一張圖像,該函數中各參數的說明如下:cv2.IMREAD_COLOR:默認參數,讀入彩色圖片img1 = cv2.imread('hello.jpg', 0)顯示圖像Opencv中使用函數cv2.imshow(name,img)顯示圖像,該函數中各參數的說明如下:name:顯示圖像的窗口名字img:  是即將要顯示的圖像(imread讀入的圖像),窗口大小自動調整為圖片大小
  • 【計算機視覺處理一】OpenCV入門
    詳細內容可以查看OpenCV的官網:https://opencv.org/。2、OpenCV能做什麼?OpenCV中實現了了很多計算機視覺算法,包括基本的圖片運算、閾值處理、圖像濾波、形態學操作等。除此之外,OpenCV還提供了級聯分類器可以用於人臉檢測。不僅是圖片,OpenCV同時提供了視頻處理相關的操作,下面我們來看看一些案例。
  • opencv學習—03圖像運算(一)
    opencv中提供函數cv2.addWeighted()實現圖像的加權和,語法格式如下:dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)alpha和beta分別是src1、src2的係數,且係數之和可以等於1,也可以不等於1,gamma為必選參數,可以為0但是不能省略!
  • 「python opencv 計算機視覺零基礎實戰」第一節
    一、學習目標安裝opencv了解什麼是計算機視覺了解讀取圖片的方法了解顯示圖片的方法二、完成opencv的helloworld程序編寫2.1 opencv是什麼要了解opencv是什麼,首先可以看2.2 opencv可以做什麼opencv應用廣泛,例如人臉識別、車牌識別、機器人、指紋、文字等,還可以對圖片信息進行方便的編輯,例如可以模糊圖片、檢測目標等;我們可以通過學習opencv可以做一個「檢測老闆面部自動切屏程序」、「類似於圖片摳圖等圖片操作的軟體」、「自動駕駛」等。
  • 基於 opencv 的圖像處理入門教程
    雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    image = cv2.imread(「images/faces.jpg」)當在 PHP(以及在 C++中)中讀取一張圖像時,信息就存儲在 Mat 對象(矩陣)中。函數在 Caffe 中加載預訓練模型。
  • MATLAB中圖像處理的一些簡單函數
    [X,MAP]=imread(『filename』,『fmt』)其中,X,MAP分別為讀出的圖像數據和顏色表數據,fmt為圖像的格式,filename為讀取的圖像文件(可以加上文件的路徑)。例:[X,MAP]=imread(』flowers.tif』,’tif』);比較讀取二值圖像,灰度圖像,索引圖像,彩色圖像的X和MAP的特點,可以利用size函數用來顯示數組的維數,了解數據的特點。 B=size(a) 返回數組a 的維數。