此筆記針對 Python 版本的 opencv3,c++ 版本的函式和 python 版本的函式引數幾乎一樣,只是矩陣格式從 ndarray 型別變成適合 c++ 的 mat 模板型別。注意,因為 python 版本的opncv只提供介面沒有實現,故函式原型還是來自 c++版本的opencv,但是引數解釋中的資料型別還是和 python 保持一致。
影像的載入:imread() 函式
函式原型:
Mat imread(const sting& filename, int flags=None)
引數解釋:
filename
:影像的檔案路徑,sting
字串型別flags
:載入標識,以何種方式讀取圖片,int
型別的flags
。常用取值解釋如下:flags = 0
:始終將影像轉成灰度圖再返回flags = 1
:始終將影像轉換成彩色圖再返回,如果讀取的是灰度圖,則其返回的矩陣shape
將變為(height, width, 3)
flags = 2
:如果載入的影像深度為16
位或者32
位,就返回對應深度的影像,否則,就轉換為8
點陣圖像再返回。
總結:讀取檔案中的圖片到 OpenCV
中,返回 Mat
或者 ndarray
型別的矩陣,以彩色模式載入影像時,解碼後的影像會預設以 BGR
的通道順序進行儲存。
cv2.imread()函式:
python-opencv
庫的 imread
函式的 flags
引數取值方式與 C++
版有所區別。使用函式 cv2.imread()
讀入影像,影像要麼在此程式的工作路徑,要麼函式引數指定了完整路徑,第二個引數是要告訴函式應該如何讀取這幅圖片,取值如下:
cv2.IMREAD_COLOR
: 取值1
,讀入一副彩色影像。影像的透明度會被忽略,這是預設引數。cv2.IMREAD_GRAYSCALE
: 取值0
,以灰度模式讀入影像。cv2.IMREAD_UNCHANGED
: 取值-1
,讀入一幅影像,並且包括影像的 alpha 通道。
Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively.
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)
opencv-python
庫的讀取影像函式 cv2.imread()
官方定義如下圖。
影像的顯示:imshow()函式
函式原型:
void imshow(const string &winname, InputArray mat)
引數解釋:
winname
:需要顯示的視窗標識名稱,string
字串型別mat
:需要顯示的影像矩陣,ndarray
numpy 矩陣型別
總結:imshow
函式用於在指定的視窗顯示影像,視窗會自動調整為影像大小。
minMaxLoc 函式
函式 cv :: minMaxLoc
查詢最小和最大元素值及其位置,返回的位置座標是先列號,後行號(列號,行號) 。在整個陣列中搜尋極值,或者如果mask不是空陣列,則在指定的陣列區域中搜尋極值。(只適合單通道矩陣)。函式原型:
CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,
CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
函式引數解釋:
src
:input single-channel array.minVal
:pointer to the returned minimum value; NULL is used if not required.maxVal
:pointer to the returned maximum value; NULL is used if not required.minLoc
:pointer to the returned minimum location (in 2D case); NULL is used if not required.maxLoc
:pointer to the returned maximum location (in 2D case); NULL is used if not required.
位深度的概念
- 灰度圖的位深度是
16
,則其矩陣的元素型別為uint16
,彩色圖其位深度一般是24
,紅色佔8
個位、藍色佔8
個位、綠色佔8
個位,其矩陣的元素型別為uint8
。 - 位解析度(
Bit Resolution
)又稱色彩深度、色深或位深度,在點陣圖影像或影片影片緩衝區,指一個畫素中,每個顏色分量(Red、Green、Blue、Alpha
通道)的位元數。 matplotlib.image.imsave
將灰度圖的矩陣儲存為影像格式時,其預設儲存的影像通道數為4
:RGBA
,其中RGB
三個通道對應的二維矩陣數值完全一樣。