1. 程式人生 > >OpenCV 學習筆記 02 處理檔案、攝像頭和圖形使用者介面

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 影象與原始位元組之間的轉換

無論哪種格式的影象,每個畫素都有一個對應值,但不同格式所表示的畫素方式也存在有差異。