c_learn_2
903
2022-05-28
2.6 圖像讀寫
OpenCV允許使用imread函數從磁盤讀取一個圖像到Mat對象,我們在本章前面的例子中簡單使用過這個函數。imread函數接受被讀取的圖像的文件名和flag兩個參數,并返回用讀取的圖像構建的Mat對象。圖像文件必須符合OpenCV所支持的圖像格式。此處列出OpenCV支持的常用格式:
Windows位置:*.bmp, *.dib。
JPEG文件:*.jpeg, *.jpg, *.jpe。
便攜式網絡圖像格式:*.png。
便攜式圖像格式:*.pbm, *.pgm, *.ppm, *.pxm, *.pnm。
TIFF文件:*.tiff, *.tif。
一定要時常查看OpenCV的文檔和更新列表,特別是在某些操作系統上的一些圖像格式的異常情況和注意事項。
對于flag參數,它可以是一個或幾個在OpenCV中定義的ImreadModes枚舉值的組合。以下是一些使用最廣泛的條目,它們的含義從名字就可看出。
IMREAD_UNCHANGED。
IMREAD_GRAYSCALE。
IMREAD_COLOR。
IMREAD_IGNORE_ORIENTATION。
例如,下面的代碼可以用來從磁盤讀取圖像,而不需要讀取存儲在圖像EXIF數據中的方向值,并且把圖像轉換成灰度圖:
可交換圖像文件格式(EXchangeable Image File format,EXIF)是專為數碼相機的照片定制的標準,它添加了標簽和附加數據(元數據)。標簽中可能包含了生產商,相機模型和照片的方向信息。OpenCV能夠讀取并理解這些標簽(比如方向信息),也可以像上面的代碼那樣,忽略它們。
讀取圖像后,可以調用empty函數來檢查是否讀取成功。你也可以通過channels函數獲取通道數,用depth函數獲取像素深度,以及用type函數獲取圖像類型等。另外,也可以像我們在本章前面看到的那樣,調用imshow函數來顯示圖像。
同樣,imreadmulti函數可讀取多頁圖像為一組Mat對象的向量。這里顯著不同在于imreadmulti返回一個bool值來檢測頁面是否被成功讀取,并以引用的方式傳遞給vector
imwrite函數可用來把一個圖像寫入磁盤上的一個文件。imwrite函數的輸入參數包括要寫入的文件名、Mat對象和一個包含寫入操作參數的整數向量。這個向量在取默認值的情況下可忽略。下面是OpenCV中完整的參數枚舉值列表,這些參數可用于imwrite函數以更改寫入進程的行為。
ImwriteFlags。
ImwriteEXRTypeFlags。
ImwritePNGFlags。
ImwritePAMFlags。
下面的代碼例子描述了如何把Mat對象寫入圖像文件并保存到磁盤。注意此例中的圖像格式是由提供的文件擴展名得到的,這里是png:
除了使用imread和imwrite函數在磁盤中讀寫圖像,也可以使用imdecode和imencode函數來讀寫存儲在內存緩沖區中的圖像。這兩個函數留給讀者自行研究,我們將繼續下一個主題,即使用OpenCV實現視頻讀寫。
OpenCV
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。