OpenCV 學習筆記 02 處理檔案、攝像頭和圖形使用者介面
在處理檔案前需要引入OpenCV庫,同時也引入unmpy庫
import cv2 import numpy as np
1 基本的讀寫操作
1.1 影象檔案的讀寫操作
1.1.1 影象檔案的讀取操作
opencv 的 imread() 函式和 imwrite() 函式支援各種靜態影象檔案格式。例如bmp, png, jpeg, tiff等。
cv2.imread(filename[, flags])
imread() 函式從檔案中載入並返回該影象,若指定影象不能被讀取(檔案丟失、許可權不正確、不支援或非法的格式等等),則返回一個空的矩陣。
opencv 為 flags 提供了列舉型別文件,主要有
- IMREAD_UNCHANGED 如果設定,則按原樣返回載入的影象(使用Alpha通道,否則會被裁剪)。
- IMREAD_GRAYSCALE 如果設定,則始終將影象轉換為單通道灰度影象。
- IMREAD_COLOR 如果設定,請始終將影象轉換為3通道BGR彩色影象。
- IMREAD_ANYDEPTH 如果設定,當輸入深度為16/32位時,則返回相應的深度,否則將其轉換為8位。
- IMREAD_ANYCOLOR 如果設定,則以任何可能的顏色格式讀取影象。
- IMREAD_LOAD_GDAL 如果設定,請使用gdal驅動程式載入影象。
備註1:
cv :: ImreadModes {
cv :: IMREAD_UNCHANGED = -1,
cv :: IMREAD_GRAYSCALE = 0,
cv :: IMREAD_COLOR = 1,
cv :: IMREAD_ANYDEPTH = 2, cv :: IMREAD_ANYCOLOR = 4,
cv :: IMREAD_LOAD_GDAL = 8}
具體參考 Image file reading and writing
備註2:
filename 可以是絕對路徑,也可以是相對路徑。
win環境下的絕對路徑:D:\\grandfather\\father\\test.png
Unix下的檔案間隔符為 /
備註3:
無論採用哪種模式,imread() 函式均會刪除所有透明alpha 通道資訊。
備註4:
當影象檔案為灰度格式時,imread() 函式也會返回 BGR(red-green-blue) 格式的影象,BGR與RGB所表示的色彩空間相同,但是位元組順序相反。
備註5:
那怎麼讀取灰度圖檔案後再儲存為灰度圖呢?
增加imread()函式的 flags 引數即可
grayImage = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE) cv2.imwrite('NewTest.png', grayImage)
1.1.2 影象檔案的寫入操作
imwrite(filename, img[, params])
該函式將影象儲存為指定檔案中
影象格式是根據副檔名選擇的,一般情況下,該函式只能儲存8位單通道或3位通道(按“BGR”通道順序)的影象。
具體可參看1.1.1 中的程式碼示例。
另:
opencv可以讀取一個格式影象檔案,儲存時選取另一種格式影象檔案。
將 png --> jpg 格式。
image = cv2.imread('test.png') cv2.imwrite('test.jpg',image)
1.2 影象與原始位元組之間的轉換
無論哪種格式的影象,每個畫素都有一個對應值,但不同格式所表示的畫素方式也存在有差異。